【问题标题】:Get Current row from Gridview in ASP.NET从 ASP.NET 中的 Gridview 获取当前行
【发布时间】:2021-05-07 23:53:06
【问题描述】:

我有一个带有删除和编辑按钮的 Gridview,看起来像

<asp:GridView ID="grdTrackedItems" runat="server" AutoGenerateColumns="False" Width="330px"
            BorderStyle="None" OnRowDataBound="OnRowDataBoundTrackedItems" OnRowDeleting="OnRowDeletingTrackedItems">
            <Columns>
              <asp:TemplateField HeaderText="Name">
                <ItemTemplate>
                  <asp:Label ID="lblItem" runat="server" Text='<%# Eval("Item") %>' />
                </ItemTemplate>
              </asp:TemplateField>
              <asp:TemplateField>
                <ItemTemplate>
                  <asp:ImageButton ID="imgDelete" runat="server" ImageUrl="~/Resources/Images/Delete.png"
                    Height="12" Width="12" ToolTip="Delete" CommandName="Delete" />
                </ItemTemplate>
                <ItemStyle Width="22px" />
              </asp:TemplateField>
              <asp:TemplateField>
                <ItemTemplate>
                  <asp:ImageButton ID="imgEdit" runat="server" ImageUrl="~/Resources/Images/Edit.png"
                    Height="12" Width="12" ToolTip="Edit" />
                </ItemTemplate>
                <ItemStyle Width="22px" />
              </asp:TemplateField>
            </Columns>
          </asp:GridView>

我在页面底部有一个文本框和保存按钮。当我单击 gridview 中的编辑按钮时,我想在文本框中显示项目名称。我该怎么做?

【问题讨论】:

    标签: asp.net gridview edit


    【解决方案1】:

    为 RowEditing 事件提供一个处理程序,然后在该处理程序中更新您的文本框。

    <asp:GridView ID="grdTrackedItems" runat="server" 
                 AutoGenerateColumns="False" Width="330px"
                ...
                 OnRowEditing="EditRecord">
                <Columns>
    
    
    protected void EditRecord(object sender, GridViewEditEventArgs e)
    {
        Label lbl = (Label)grdTrackedItems.Rows[e.NewEditIndex].Cells[0].FindControl("lblItem");
    
    
        MyTextBox.Text = lbl.text;
    }
    

    【讨论】:

    • 抱歉,代码示例有点通用。您需要将它引用的单元格更改为您的实际单元格......看起来它在您的第一列,而不是第 6 列,并且您需要获取标签控件的值。我会更新代码。
    • 我有一个疑问。由于我的网格只包含一项,我可以将它放在 DataKeyNames 中,是否有任何性能问题?
    【解决方案2】:

    在编辑按钮单击处理程序中,您可以访问当前行,如下所示:

    protected void Button1_Click1(object sender, EventArgs e)
    {
        GridViewRow row = ((ImageButton)sender).Parent.Parent as GridViewRow;
        // Do some thing with this row
    }
    

    【讨论】:

      【解决方案3】:

      我从river-blue's 回答中得到了解决方案。

      将 DataKeyNames="Item" 添加到 Gridview 并在编辑按钮内单击处理程序

           protected void OnClickEdit( object sender, EventArgs e )
          {
              GridViewRow row = ( (ImageButton) sender ).Parent.Parent as GridViewRow;
              txtName.Text =  grdTrackedItems.DataKeys[row.RowIndex].Value.ToString();
          }
      

      【讨论】:

        猜你喜欢
        • 2010-11-26
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-30
        相关资源
        最近更新 更多