【问题标题】:Getting row index from an ImageButton click in a GridView从 GridView 中单击 ImageButton 获取行索引
【发布时间】:2010-10-02 18:22:42
【问题描述】:

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

一旦在这个函数中,我怎样才能获得具有已单击按钮的行的索引。看来我只有页面上的鼠标坐标了。

【问题讨论】:

    标签: asp.net vb.net gridview imagebutton


    【解决方案1】:

    您可以使用它而不是循环遍历行

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

    【讨论】:

    • Sweet - 这个更高效 - 我会整合它。
    • 改变我的答案,因为这更接近我实际实施的解决方案。我最终设置了 TabIndex 值,并查看了它。你如何使用“行索引”?这是自定义属性吗?
    【解决方案2】:

    将发送者转换为 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
      

      【讨论】:

        【解决方案4】:

        这是一个很好的技巧。 我还有一个技巧。 你可以试试……

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

        这也是一个很好的方法。

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 我一直使用 GridView 绑定来执行此操作。太棒了!
          • 它有效,但荒谬的是 RowCommand 无法告诉您是哪一行触发了该命令。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多