2011-06-28 42 views
28

Tôi có một Gridview asp.net.
Nhận chỉ mục hàng trên sự kiện Row.net của Asp.net

<asp:TemplateField HeaderText="View Faktor" ShowHeader="False" Visible="True"> 
       <ItemTemplate> 
        <asp:ImageButton ID="imgBtn1" CssClass="SelectRow" runat="server" CausesValidation="false" 
         CommandArgument='<%#(eval("mprID")) %>' CommandName="ViewFactors" ImageUrl="~/tadarokat/Images/factor.png" 
         Text="" /> 
       </ItemTemplate> 
      </asp:TemplateField> 

Làm cách nào để có thể nhận rowIndex trên sự kiện lệnh hàng?
Tôi muốn đánh dấu (chọn) hàng đích khi Rowcommand kích hoạt.

Trả lời

62

đây là câu trả lời cho câu hỏi của bạn.

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

int RowIndex = gvr.RowIndex; 
3

nếu bạn đã xây dựng trong lệnh của GridView như Insert, Update xóa, trên lệnh hàng bạn có thể sau dòng mã để có được chỉ số.

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 \ Button vv

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

code-behind

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

Chắc chắn là giải pháp đơn giản nhất, đặc biệt là khi VB đúc là không đơn giản như C# ví dụ trong câu trả lời khác. – Brent

+3

Thao tác này sẽ không hoạt động khi bạn có nhiều trang trong chế độ xem lưới – MyCSharpCorner

1

tôi đã có thể sử dụng câu trả lời rahularyansharma của trên trong dự án của riêng tôi, với một thay đổi nhỏ. Tôi cần thiết để lấy giá trị của các ô cụ thể trên hàng mà người dùng nhấp vào một LinkButton. Dòng thứ hai có thể được sửa đổi để có được giá trị của nhiều ô như bạn muốn. Đây là giải pháp của tôi:

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

Hoặc, bạn có thể sử dụng một lớp control thay vì các loại của họ:

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

int RowIndex = row.RowIndex; 
+1

Tôi thích điều này. Tổng quát hơn và một thay thế đơn giản khi e.CommandArgument được sử dụng. – clamchoda

Các vấn đề liên quan