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å.
5 svar · 204 visningar · startad av andreas_lindh
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
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å.
Vad är E för något? Borde det inte vara e.Item.ItemIndex?
När jag skriver ut E.Item.ItemIndex så skrivs positionen i datagriden ut inte id:t för själva posten.
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];