2009-01-21 48 views
5

我有一個通過templatefield添加到列的GridView和ImageButtons。我已將一個函數附加到「OnClick」事件。從GridView中的ImageButton點擊獲取行索引

一旦進入此功能,我怎樣才能得到已點擊按鈕的行的索引。看來,我擁有的只是鼠標在頁面上的座標。

回答

12

而不是通過行循環的,你可以使用這個

<asp:ImageButton runat="server" id="ibtn1" ... RowIndex='<%# Container.DisplayIndex %>' 
OnClick="button_click"/> 

... 

protected void button_click(object sender, EventArgs e){ 
    ImageButton ibtn1 = sender as ImageButton; 
    int rowIndex = Convert.ToInt32(ibtn1.Attributes["RowIndex"]); 

    //Use this rowIndex in your code 
} 
+0

甜 - 這是更高效 - 我會整合它。 – Jeffrey 2009-01-21 19:32:23

2

我找到的最簡單的方法是在Click事件中使用Command事件,並將項目ID作爲命令參數發送。

您也可以遍歷GridView中的行並將該行中的ImageButton與Click事件中的sender參數進行比較。

+0

我在GridView綁定中一直這樣做。太好了! – 2009-01-21 19:09:22

+1

它可行,但RowCommand無法告訴你哪一行觸發了該命令,這很荒唐。 – 2010-03-02 16:47:49

12

鑄發送到ImageButton的再抹上圖像按鈕的NamingContainer到行:

VB:

Dim btn as ImageButton = CType(sender, ImageButton) 

Dim row as GridViewRow = CType(btn.NamingContainer, GridViewRow) 

C#:

ImageButton btn = (ImageButton)sender; 

GridViewRow row = (GridViewRow)btn.NamingContainer; 
3

會同意bdukes最簡單的選擇是使用CommandArgument。將數據的唯一ID號碼綁定到該屬性中,然後處理_RowCommand事件。

例如:

<asp:TemplateField > 
    <HeaderStyle Width="20" /> 
    <ItemTemplate> 
     <asp:ImageButton ImageUrl="images/icons/iCal.png" CommandArgument='<%# Eval("Event_ID") %>' ToolTip="iCal" runat="server" Height="18" Width="18" /> 
    </ItemTemplate> 
</asp:TemplateField> 


Protected Sub gv_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gv.RowCommand 

    e.CommandArgument 'use this value in whatever way you like 

End Sub 
2

這是很好的伎倆。 我還有另一招。 你可以試試...

protected void userGridview_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "Select") 
     { 
      GridViewRow rowSelect = (GridViewRow)(((Button)e.CommandSource).NamingContainer); 
      int rowindex = rowSelect.RowIndex; 
     } 
    } 

這也是一個不錯的方法。