|
-
February 17th, 2003, 07:21 AM
#1
Datagrid unwanted double databind
Hi, I am having issues with some coding & datagrids.
I got all the functionality in my datagrid (took me long enough) that I wanted but now I get some very ODD problem.
My datagrid fills (databinds) correctly at the initial load of the page.
However IF i press any of the sorting buttons, selecting buttons (or any other function that makes the page rebind), I get double results in my datagrid!
this is only the first time I use a function though!!! the second third etc the code works great.
Any ideas what im doing wrong.
Initial load: works fine
first use of ANY function: Double results
second and onwards : works fine......
any tips?
Here is the complete code im useing.. hopefully someone can help me out..
Hope there is some usefullstuff in there for other coders
A.Prinsen
PS. if you got any tips how to improve the coding this is my first ASP.Net project advice is welcome
-
February 17th, 2003, 07:22 AM
#2
here is the code PART 1 (script part)
Code:
%@ Page Explicit="True" Language="VB" Debug="True" %
%@ Import Namespace="system.data"%
%@ Import Namespace="system.data.OLEDB"%
script language="VB" runat="server"
Protected login as string
Protected password as string
Protected validated as boolean
Protected SQLStmt As String = "SELECT klnaam, klsoort, klstad, kltel, klFax FROM klanten"
Protected ConString As String = "Provider=SQLOLEDB;server=localhost;uid=****;pwd=****;database=*****;"
protected da as new oledbdataadapter(SQLStmt, constring)
protected ds as new dataset
protected dtable as datatable
protected dv as new dataview
SUB page_load(ByVal sender As System.Object, ByVal e As System.EventArgs)
IF Not Page.IsPostBack Then
USER_CHECK(session("login"),session("password"))
IF validated
lbluser.text= "Logged in as: " & session("login")
panelauth.visible="false"
panellogged_in.visible="true"
viewstate("sortdirection")= "ASC"
viewstate("sortfield")= "klnaam"
InitGrid()
ELSE
panelauth.visible="true"
panellogged_in.visible="false"
END IF
END IF
generatepager()
END SUB
SUB USER_CHECK(login,password)
'===================
'DB connecten om een read actie uit te voeren.
'===================
Dim myconnection as new OLEDBconnection(ConString)
Dim sqlquery as string = "SELECT * FROM tblusers WHERE login = " & "'" & login & "'" & "And password =" & "'" & password & "'"
Dim mycommand = new OLEDBcommand(sqlquery, myconnection)
Dim userdata as Oledbdatareader
TRY
myconnection.open()
CATCH
response.write("ERROR: Failed to open database<br>")
myconnection.close()
EXIT SUB
END TRY
'========================
'controleren of user & password bestaan in database zoniet is het dus niet geldig en wordt toegang gewijgerd
'========================
TRY
userdata = mycommand.executeReader()
CATCH
response.write("ERROR: Failed to read database<br>")
myconnection.close()
EXIT SUB
END TRY
IF NOT userdata.Read() THEN
validated = False
userdata.close
ELSE
validated = True
userdata.close
END IF
myconnection.close()
END SUB
SUB checklogin(obj as object, E as eventargs)
USER_CHECK(invoerlogin.text , invoerpassword.text)
IF validated = true
session("login")= invoerlogin.text
session("password")= invoerpassword.text
response.redirect("main.aspx")
ELSE
response.write("login/password combination is incorrect")
END IF
END SUB
SUB InitGrid()
da.fill(ds,"klanten")
dtable = ds.tables("klanten")
dv.table = (dtable)
dv.sort = "klnaam ASC"
mainscreen.DataSource = dv
mainscreen.Databind()
END SUB
SUB fillGrid()
da.fill(ds,"klanten")
dtable = ds.tables("klanten")
dv.table = (dtable)
dv.sort = viewstate("sortfield") & " " & viewstate("sortdirection")
dv.rowfilter = viewstate("AlphaSelection")
mainscreen.DataSource = dv
Mainscreen.Databind()
END SUB
SUB mainscreen_pageindexchanged(obj as Object, e as DataGridPageChangedEventArgs)
Mainscreen.CurrentPageIndex = e.NewPageIndex
'Rij deselecteren
Mainscreen.SelectedIndex = "-1"
END SUB
SUB SessionEnd(Obj as object, E as eventargs)
'session terminaten
Session.Abandon
'redirecten na terminaten naar index
Response.Redirect("index.aspx")
END SUB
Sub SelectItemCommand(Obj As Object, E As DataGridCommandEventArgs)
'Als item in grid wordt geclickt dan dit uitvoeren:
'Geselecteerde item bepalen:
Mainscreen.SelectedIndex = E.Item.ItemIndex
'fillgrid alleen uitvoeren als de gedrukte knop afkomstig is uit de rij
'waar hij gedrukt is. (anders krijg je een dubbele fillgrid! met bijvoorbeeld Sorten)
Select Case E.Item.ItemType
Case ListItemType.Item, ListItemType.SelectedItem
fillGrid()
End Select
End Sub
Sub SortCommand_OnClick(Source As Object, E As DataGridSortCommandEventArgs)
'status van gekozen letter
'viewstate("alpha","")
'status van desc-asc
viewstate("sortfield")= e.SortExpression
IF viewstate("lastfield")<> viewstate("sortfield") Then
viewstate("sortdirection") = "ASC"
Else
If viewstate("sortdirection") = "DESC"
viewstate("sortdirection") = "ASC"
Else
viewstate("sortdirection") = "DESC"
End If
End If
'laatste gebruikte sorteer kolom onthouden.
viewstate("lastfield") = e.SortExpression
'mogelijke paginereing op 0 zetten om bij pagina 1 it beginnen als paginere aanstaat
mainscreen.CurrentPageIndex = "0"
'mogelijk selectie unselecteren
mainscreen.SelectedIndex = "-1"
fillgrid()
END SUB
SUB generatepager()
'aanmaken van alles-ABC...Z knoppen en toewijzen van functies
Dim alphatitle As LiteralControl = New Literalcontrol()
Dim Spacer1 As LiteralControl = New Literalcontrol()
Dim AllesLinkButton As LinkButton = New LinkButton()
Dim Aantal As textbox = New textbox()
AllesLinkButton.Text = "[Alles]"
alphatitle.text= "Selectie: "
Spacer1.text= " " & "||" & " "
AllesLinkButton.CommandName = "alphapaging"
AllesLinkButton.CommandArgument = ""
AddHandler allesLinkButton.Command, AddressOf MyLinkButtonclick
AlphaPagePanel.Controls.Add(alphatitle)
AlphaPagePanel.Controls.Add(AllesLinkButton)
AlphaPagePanel.Controls.Add(spacer1)
'alphabet met links genereren voor selectie Chr 65=a
Dim i as integer
For i = 65 To 65 + 25
Dim Spacer2 As LiteralControl = New LiteralControl()
Dim MyLinkButton As LinkButton = New LinkButton()
Spacer2.text=" "
MyLinkButton.Text = Chr(i)
MyLinkButton.CommandName = "alphapaging"
MyLinkButton.CommandArgument = Chr(i)
'functie koppelen aan knoppen.. duurde ff om te vinden zeg pff
AddHandler MyLinkButton.command, AddressOf MyLinkButtonclick
AlphaPagePanel.Controls.Add(MyLinkButton)
AlphaPagePanel.Controls.Add(spacer2)
Next
END SUB
SUB MyLinkButtonclick(obj as object, E as CommandEventargs)
'uitvoeren van alles-abc..z knoppen, deze maken een selectie criterium op alphabet
IF e.CommandArgument <> "" Then
viewstate("AlphaSelection")= " klnaam LIKE " & "'" & lcase(e.CommandArgument) &"%" & "'"
Else
viewstate("AlphaSelection")= "klnaam LIKE " & "'" & "*" & "'"
End If
'Pagina op 1 instellen
Mainscreen.CurrentPageIndex = "0"
'Rij deselecteren
Mainscreen.SelectedIndex = "-1"
FillGrid()
END SUB
Sub maxqueries(Obj As Object, e As EventArgs)
If maxaantal.text <> ""
'check of aantal per pagina tussen 0 en 9999 valt
'niets doen als het erbuiten valt / zo ook alpha chars makkelijk afvangen
'pager laten zien plaatsvervangende footer laten zien
If (maxaantal.text < "0") or (maxaantal.text > "9999")
ElseIf maxaantal.text = "0"
Mainscreen.allowpaging="false"
Mainscreen.showfooter="true"
Mainscreen.SelectedIndex = "-1"
Else
Mainscreen.allowpaging = "true"
Mainscreen.pagesize = maxaantal.text
Mainscreen.showfooter="False"
Mainscreen.SelectedIndex = "-1"
End If
Else
Mainscreen.allowpaging="false"
Mainscreen.showfooter="true"
Mainscreen.SelectedIndex = "-1"
End If
'Pagina op 1 instellen als er gebruik van wordt gemaakt veroorzaakt anders
'crash als index hoger is dan de aantal nieuwe pagina's die worden gemaakt
Mainscreen.CurrentPageIndex = "0"
FillGrid()
END SUB
SUB clearfooter(Sender As Object, e As DataGridItemEventArgs)
'mooie lege footermaken (puur cosmetisch)
If e.Item.ItemType = ListItemType.Footer Then
e.Item.Cells.Clear()
Dim tc As New TableCell()
tc.ColumnSpan = 5
e.Item.Cells.Add(tc)
Dim lc As New LiteralControl()
lc.Text = " "
tc.Controls.Add(lc)
End If
END Sub
'========================EINDE SCRIPT================================
/script
-
February 17th, 2003, 07:25 AM
#3
HTML part
Code:
{body bgcolor="#EEEEEE"}
{form method="post" runat="server"}
{asp:panel id="panelauth" runat="server"}
Authentication is required in order to access this page.{br}
{ASP:textbox id="invoerlogin" runat="server"/}
{ASP:requiredfieldvalidator id="loginrequired" controltovalidate="invoerlogin" Errormessage="Login required" display="none" runat="server" /}
{ASP:textbox id="invoerpassword" textmode="password" runat="server"/}
{ASP:requiredfieldvalidator id="passwordrequired" controltovalidate="invoerpassword" Errormessage="Password required" display="none" runat="server"/}
{ASP:button id="submit" text="submit" onclick="checklogin" runat="server" /}
{ASP:validationsummary displaymode="bulletlist" forecolor="red" runat="server" /}
{/asp:panel}
{asp:panel id="panellogged_in" runat="server"}
{table width="100%" height="30"}
{tr valign=top}
{td align=left}{Font size=+1}Administratie{/font}{/td}
{td align=right}{asp:label id="lbluser" runat="server" /}
{asp:button id="logoff" text="Log Off" onClick="sessionend" runat="server"/}
{/td}
{/tr}
{/table}
nog te implementeren knoppen: Klant - partner - leverancier - overige{br}
{table width="100%" border="1" cellspacing="3" cellpadding="0" bgcolor="#dddddd"
{tr}
{td width=65% rowspan="2" valign="Top" height="100" bgcolor="#dddddd" }
{div id="mainscreendiv" style="position:relative;width:100%;height:100%;overflow:scroll;"}
{asp:panel ID="alphapagepanel" border="1" align="left" backcolor="#dddddd" Width="100%" runat="server" /}
{asp:Datagrid runat="server"
Id="mainscreen"
AllowSorting = "True"
OnSortCommand = "SortCommand_OnClick"
OnitemCreated = "clearfooter"
OnItemCommand = "SelectItemCommand"
OnPageIndexChanged="mainscreen_pageindexchanged"
Showfooter="true"
Autogeneratecolumns="FALSE"
AllowPaging="false"
BorderColor="black"
BorderWidth="1"
GridLines="Both"
CellPadding="3"
CellSpacing="0"
Font-Name="Arial"
Font-Size="10"
Width="100%"
Backcolor="#FFFFFF"
Headerstyle-BackColor="#aaaadd"
Headerstyle-Forecolor="#FFFFFF"
Headerstyle-Font-Name="Arial"
Headerstyle-Font-Bold="True"
Headerstyle-Font-Size="11"
SelectedItemStyle-BackColor="#ddddaa"
SelectedItemStyle-Font-Name="Arial"
SelectedItemStyle-Font-Bold="False"
SelectedItemStyle-Font-Size="10"
AlternatingItemStyle-BackColor="#eeeeee"
AlternatingItemStyle-Font-Name="Arial"
AlternatingItemStyle-Font-Size="10"
Pagerstyle-visible="true"
Pagerstyle-Font-Bold="True"
Pagerstyle-BackColor="#aaaadd"
Pagerstyle-Forecolor="#FFFFFF"
Pagerstyle-Font-Name="Arial"
Pagerstyle-Font-Size="11"
Pagerstyle-mode="numericpages"
footerstyle-colums="5"
footerstyle-Font-Bold="True"
footerstyle-BackColor="#aaaadd"
footerstyle-Forecolor="#FFFFFF"
footerstyle-Font-Name="Arial"
footerstyle-Font-Size="11"}
{Columns}
{asp:BoundColumn
DataField="klnaam"
HeaderText="Naam"
SortExpression="klnaam"
/}
{asp:BoundColumn
DataField="klstad"
HeaderText="Stad"
SortExpression="klstad"}
{/asp:BoundColumn}
{asp:BoundColumn
DataField="kltel"
HeaderText="Tel. nr."
SortExpression="kltel"
ItemStyle-Width="120px"}
{/asp:BoundColumn}
{asp:ButtonColumn
Text="[Select]"
Visible="true"
ItemStyle-Width="60px"
ItemStyle-horizontalAlign="Center"}
{/asp:ButtonColumn}
{/Columns}
{/asp:datagrid}
{asp:panel align="left" ID="aantal" backcolor="#dddddd" Width=100% runat="server"}
Getoond per pagina:
{asp:textbox id="maxaantal" maxlength="4" columns="4" autopostback="true" onTextChanged="maxqueries" value="0" runat="server" /}
{/asp:panel}
{/div}
{/td}
{td width=35% valign="Top" height="125" BGcolor="#FFFFFF"}
{div id="abo" style="position:relative;width:100%; height:100%;overflow: scroll;backcolor:#FFFFFF"}
Verlopen service abo's hier
{/td}
{/tr}
{tr}
{td height="375" bgcolor="#ffffff"}
{div id="info" style="position:relative;width:100%; height=100%;overflow: scroll;"}
Extra info hier{br}
test{br}
test{br}
test{br}
test{br}
tset{br}
tset{br}
tset{br}test{br}test{br}
test{br}test{br}
test{br}test{br}
test{br}
test{br}
test{br}test{br}
test{br}test{br}
test{br}test{br}
test{br}einde test
{/div}
{/td}
{/tr}
{/table}
{/asp:panel}
{/form}
{/body}
{/html}
please interchange {} for the greater aand smaller signs
(html problems / and code /code not working properly
Last edited by Blackat; February 17th, 2003 at 07:29 AM.
-
February 17th, 2003, 07:30 AM
#4
or download the full code from
www.logitime.com/code.txt
(right mouseclick the link and use save as option)
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|