webForumDet fria alternativet

Få fram id från datagrid

.NETur .NET

5 svar · 204 visningar · startad av andreas_lindh

Medlem sedan jan. 20011 140 inlägg
Frågan#1

Försöker få fram id:t från min datagrid men får ett felmedelande.

Exception Details: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

Source Error: 

Line 29: 	
Line 30: 	sub valjlag(obj as object, e as datagridcommandeventargs)
Line 31: 		dim l_id as integer = datagrid1.DataKeys(CInt(E.Item.ItemIndex))
Line 32: 		Dim strSQL as String= String.Format("select * from deltagande_lag where id={0}", l_id)	
Line 33: 		'response.write(strsql &"<br />")
 

Source File: h:\inetpub\wwwroot\cup\addspelare.aspx    Line: 31

Här är koden jag använder

sub valjlag(obj as object, e as datagridcommandeventargs)
		dim l_id as integer = datagrid1.DataKeys(CInt(E.Item.ItemIndex))
		Dim strSQL as String= String.Format("select * from deltagande_lag where id={0}", l_id)	
		'response.write(strsql &"<br />")
		dim objcmd1 as new oledbcommand(strsql, objconn)
		dim dr as OleDbdatareader
		objconn.open
		dr =objcmd1.executereader
			dim antalspelare as integer
			dim lag_id as integer
			if dr.read then
				antalspelare= dr("antal_spelare")
				'lag_id= dr("lag_id")
			end if
			Dim numtexts as Integer = antalspelare
			Dim i as Integer
			For i = 1 To numtexts
                Dim t As TextBox = New TextBox()
                t.Text = "Namn" & i
                t.ID = "namn" & i
                Label1.Controls.Add(t)
                Dim n As TextBox = New TextBox()
                n.Text ="Nummer" & i
                n.ID = "Nummer" & i
                Label1.Controls.Add(t)
                Label1.Controls.Add(n)
                Label1.Controls.Add(new LiteralControl("<br />"))
            Next
	end sub
Medlem sedan nov. 2002105 inlägg
#2

Ta och se vad E.Item.ItemIndex returnerar. Verkar vara att du försöker köra CInt() på ickenumeriskt värde.

Sen undrar jag lite om E.Item.ItemIndex är instansierat korrekt. Men detta är jag lite osäker på.

Medlem sedan dec. 2000399 inlägg
#3

Vad är E för något? Borde det inte vara e.Item.ItemIndex?

Medlem sedan jan. 20011 140 inlägg
#4

När jag skriver ut E.Item.ItemIndex så skrivs positionen i datagriden ut inte id:t för själva posten.

Medlem sedan nov. 2002105 inlägg
#5

Nu är jag inte helt säker men är det id:t på det valda Item:et i Datagriden så får du titta på SelectedItem.

Har inte VS.NET installerad så jag får "torrkoda" och gissa lite ;)

Medlem sedan juni 20011 732 inlägg
#6
sub valjlag(obj as object, [b]e[/b] as datagridcommandeventargs)

e är helt enkelt ditt datagridcommandeventargs som skickas in i funktionen av din datagrid. Den kan du naturligtvis döpa till vad som helst, e är bara namnet på din variabel som innehåller ditt event.

Precis som du skriver så är e.item.itemindex det index som anger positionen i din datagrid. För att hämta det id som representerar den rad du får fram ur itemindex måste du sätta datakeyfield="id" i din datagrid. Genom att skicka in ditt itemindex i din datakey så pfår du sedan ut rätt id för den aktuella raden. Tada! :)

int myID = datagrid1.DataKeys[e.Item.ItemIndex];
134 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)