点击GridView中的ImageButton获取行索引

6

我有一个Gridview,其中通过templatefield添加了ImageButtons到列中。我已经将一个函数附加到了“OnClick”事件上。

进入这个函数后,我如何获取被点击的按钮所在行的索引。似乎我只有页面上的鼠标坐标。

5个回答

13

不必循环遍历行,您可以使用此方法

<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
}

太好了 - 这更有效率 - 我会整合它。 - Jeffrey
更改我的答案,因为这更接近我实际实现的解决方案。最终我设置了 TabIndex 值,并查看了它。你如何使用 "RowIndex"?那是一个自定义属性吗? - Jeffrey

12

将发送者转换为ImageButton,然后将图像按钮的NamingContainer转换为行:

VB:

将发送者转换为ImageButton,然后将图像按钮的NamingContainer转换为行:
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

这是一个非常好的技巧。 我还有另一个技巧。 你可以尝试一下...

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

这也是一种不错的方法。

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
我发现最简单的方法是使用Command事件而不是Click事件,并将项目ID作为命令参数发送。
你也可以循环遍历GridView中的行,并将行中的ImageButton与Click事件中的sender参数进行比较。

我经常使用GridView绑定来完成这个操作。它非常棒! - Dillie-O
1
它能够工作,但是RowCommand无法告诉你哪一行触发了命令,这很荒谬。 - Jamie Ide

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接