Jag skulle vilja ha en lite förklaring hur man ska gå tillväga för att fånga upp vilken rad man klickar på i en datagrid för webforms. Kan den här hjälpa dig kanske? Jag vill kunna fånga upp raden jag klickar på direkt. Det ska inte behövas en loop. Gör såhär då. Problemet är att jag inte vet hur man lägger till handler för eventet. ok, jag förstår ditt problem och din frustration.... SelectIndexChanged använder man väl bara när man har en listkontroll i datagriden, alltså för att välja en visst antal poster. Det ska jag inte göra utan när jag väljer en post i datagriden så hämtar jag övrig information om just den posten. Därför är jag intresserad av radnummret. Det jag kan komma på spontant är ju i så fall att du har en kolumn med checkboxar och att man där väljer vilka poster man vill se och därefter klickar t.ex. på en knapp. Sen kan du ju gå igenom den kolumnen och se vilka poster som är iklickade. Såg ett sådant exempel igår.. ska se om jag hittar det igen. Nej, jag vill bara få tag på radnummret. Det ska inte vara någon form af selection, inte i detta fallet. Ja, men hur väljer du en post i datagriden? Måste man ha en button el. liknande ? Jag trodde man bara kunde klicka i datagriden precis som för winforms för att få ett index. Du kan inte få något event automatiskt bara genom att klicka någonstans i gridden. Den renderas som en vanlig <table> på klientsidan. För att få en postback som du kan hantera på serversidan måste du antingen stoppa in någon form av knapp eller kontrol i en kolumn eller hantera det med hjälp av javascript på klientsidan (som i sin tur kan göra en postback). Problem med click eventet för en datagrid
För winforms gjorde följande:
Gick in i properties för datagrid1. Valde att visa händelser. Skrev in ett namn i Action-->Click, i ClickHändelsen skrev jag följande kod:
<code>
int rad =(dataGrid1.CurrentCell.RowNumber);
</code>Sv: Problem med click eventet för en datagrid
<code>
Function GetSelectedIndex(ByVal CID As String) As Integer
Dim iLoop As Integer
Dim dt As DataTable = ddlDataSet.Tables("Categories")
For iLoop = 0 To dt.Rows.Count - 1
If Int32.Parse(CID) = Int32.Parse(dt.Rows(iLoop)("CategoryID")) Then
Return iLoop
End If
Next iLoop
End Function
</code>Sv: Problem med click eventet för en datagrid
Jag använder mig av C#.Sv: Problem med click eventet för en datagrid
<code>
<asp:ButtonColumn Text="Select" CommandName="Select"></asp:ButtonColumn>
</code>
<code>
Private Sub DataGrid1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.SelectedIndexChanged
Label1.Text = "Du valde " & DataGrid1.SelectedItem.Cells(1).Text
Label2.Text = "Rad " & DataGrid1.SelectedIndex
End Sub
</code>
Kodar själv i VB så du får översätta själv :-)Sv: Problem med click eventet för en datagrid
Jag har nu döpt SelectedIndexChanged som du ser till selectInDatagrid1, där jag laggt till följande kod.
Nu ska man väl bara lägga till en handler till detta.
<code>
private void selectInDatagrid1(object sender, System.EventArgs e)
{
int rad=DataGrid1.SelectedIndex;
Label1.Text=rad.ToString();
}</code>
Tydligen skiljer det sig lite mellan vb och c#Sv: Problem med click eventet för en datagrid
När jag stöter på problem så brukar jag göra följande:
1, kolla i dokumentationen när problem uppstår, där finns ofta svaret på frågor.
http://msdn.microsoft.com/library/default.asp?URL=/library/prelim/csref/vcoriCReference.htm
Svaret fanns här: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolsbasedatalistclassselectedindexchangedtopic.asp
2, sök på google...
3, söka i nyhetsgrupper
4, fråga på PelleSoft...
75 % av alla problem brukar lösas vid 1, 20% vid 2, 8 % vid 3 och 1 % vid 4.... (sen är det ju några som inte går att lösa)
Du måste lägga till en kolumn för att göra själva "select" raden... om du inte vill jobba dig med en massa egna PostBacks och javascript som jag överlåter till nån annan men rent teoretiskt så borde det gå att få datagrid-raden klickbar som i winformsdatagriden. Men i HTML-delen i designern lägger du till detta mellan <asp:datagrid blabla> och </asp:datagrid>:
<Columns>
<asp:ButtonColumn Text="Select"
CommandName="Select"/>
</Columns>
Lite fler länkar till saker angående SelectedIndexChanged:
http://msdn.microsoft.com/msdnmag/issues/01/05/cutting/default.aspxSv: Problem med click eventet för en datagrid
Givetvis kollar jag i dokumentationen och på övriga sidor för att få svar på mitt problem. I detta fallet har jag inte hittat något.
Det borde ju inte vara så svårt. Jag har precis börjat med asp.net
Jag ska alltså inte ha någon extra kolumn för att selecta något.Sv: Problem med click eventet för en datagrid
här är ett exempel, det kanske kan ge dig idéer iallafall.
http://www.developer.com/net/asp/article.php/1488411Sv: Problem med click eventet för en datagrid
Det borde finnas något annat att tillgå än SelectIndexChanged ?Sv: Problem med click eventet för en datagrid
Jag tror att du måste:
1, ha varje cell klickbar genom att ha en ButtonColumn för den
2, implementera med JavaScript (onClick i varje cell), detta är nog det jobbigaste.
Lite fler länkar:
http://www.dotnetjohn.com/articles/articleid45.aspx
http://www.aspalliance.com/aspxtreme/webforms/controls/addingbuttoncolumnstodatagrid.aspxSv: Problem med click eventet för en datagrid
Sv: Problem med click eventet för en datagrid
Winforms och Webforms är inte samma sak vilket gör att vissa typer av självklarheter inte blir så självklara när man byter från den ena miljön till den andra.
Passar på att rekommendera en bra bok som går igenom mycket när det gäller datagridden: Building Web Solutions with ASP.NET & ADO.NET av Mike Esposito.
Microsoft Press.
Även om titeln inte avslöjar det handlar det nästan uteslutande om datagridden.
Mvh
Fredrik