CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4
  1. #1
    Join Date
    Feb 2003
    Posts
    4

    Question 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

  2. #2
    Join Date
    Feb 2003
    Posts
    4
    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 = "&nbsp;"
                tc.Controls.Add(lc)
            End If
    END Sub
    
    '========================EINDE SCRIPT================================
    /script

  3. #3
    Join Date
    Feb 2003
    Posts
    4
    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.

  4. #4
    Join Date
    Feb 2003
    Posts
    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
  •  





Click Here to Expand Forum to Full Width

Featured