6

我有一个 Gridview,其中 ImageButtons 通过模板字段添加到列中。我已经为“OnClick”事件附加了一个函数。

进入此函数后,如何获取已单击按钮的行的索引。看来我所拥有的只是页面上的鼠标坐标。

4

5 回答 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
}
于 2009-01-21T19:29:16.527 回答
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;
于 2009-01-21T19:56:20.950 回答
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
于 2009-08-05T09:09:12.227 回答
3

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

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

这也是一个很好的方法。

于 2009-09-09T12:41:49.063 回答
2

我发现最简单的方法是使用Command事件而不是Click事件,并将项目 ID 作为命令参数发送。

您还可以遍历 GridView 中的行,并将行中的 ImageButton 与senderClick 事件中的参数进行比较。

于 2009-01-21T19:05:36.717 回答