2011-06-28 7 views

Odpowiedz

62

to jest odpowiedź na twoje pytanie.

GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer); 

int RowIndex = gvr.RowIndex; 
3

jeśli mają wbudowane dowództwem GridView jak INSERT, UPDATE usuwać na komendę wiersza można następujący kod linii, aby uzyskać indeks.

int index = Convert.ToInt32(e.CommandArgument); 
1
protected void gvProductsList_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     try 
     { 
      if (e.CommandName == "Delete") 
      { 
       GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer); 
       int RemoveAt = gvr.RowIndex; 
       DataTable dt = new DataTable(); 
       dt = (DataTable)ViewState["Products"]; 
       dt.Rows.RemoveAt(RemoveAt); 
       dt.AcceptChanges(); 
       ViewState["Products"] = dt; 
      } 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 
    } 
    protected void gvProductsList_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 
     try 
     { 
      gvProductsList.DataSource = ViewState["Products"]; 
      gvProductsList.DataBind(); 
     } 
     catch (Exception ex) 
     { 

     } 
    } 
10

ImageButton \ Przycisk itp

CommandArgument='<%# Container.DataItemIndex%>' 

kodu za

protected void gvProductsList_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    int index = e.CommandArgument; 
} 
+0

Zdecydowanie najprostsze rozwiązanie, zwłaszcza jako odlew VB nie jest tak proste jak w przykładzie C# w druga odpowiedź. – Brent

+3

To nie zadziała, gdy masz wiele stron w widoku siatki. – MyCSharpCorner

1

byłem w stanie wykorzystać odpowiedź rahularyansharma jest wyżej w moim projekcie, z jedną niewielką modyfikacją. Potrzebowałem uzyskać wartość poszczególnych komórek w wierszu, w którym użytkownik kliknie przycisk LinkButton. Drugi wiersz można zmodyfikować, aby uzyskać wartość tylu komórek, ile chcesz. Oto moje rozwiązanie:

GridViewRow gvr = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer); 
    string typecore = gvr.Cells[3].Text.ToString().Trim(); 
2

Lub można użyć klasy control zamiast ich rodzaje:

GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer); 

int RowIndex = row.RowIndex; 
+1

Podoba mi się to. Bardziej ogólna i prosta alternatywa, gdy e.CommandArgument jest w użyciu. – clamchoda

Powiązane problemy