You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击GridView中删除/编辑LinkButton时,如何获取NAME与DESCRIPTION字段值

我来帮你搞定这个问题!在ASP.NET的GridView里点击删除或编辑按钮时,要拿到NAME和DESCRIPTION字段的值,有几种实用的方法,我给你一步步讲清楚:

方法一:使用GridView的DataKeys(推荐,更安全)

这种方法不会把数据暴露在前端HTML里,安全性更高,也是官方推荐的方式。

第一步:在GridView标签里配置DataKeyNames

修改你的GridView控件,添加DataKeyNames属性指定要获取的字段名,同时绑定对应的事件:

<asp:GridView ID="gvDetails" runat="server" AutoGenerateColumns="false" CellPadding="5" 
    DataKeyNames="NAME,DESCRIPTION" 
    OnRowDeleting="gvDetails_RowDeleting" 
    OnRowEditing="gvDetails_RowEditing">
    <!-- 你的列定义,比如BoundField或TemplateField -->
    <Columns>
        <asp:BoundField HeaderText="Report Name" DataField="NAME" />
        <asp:BoundField HeaderText="Description" DataField="DESCRIPTION" />
        <!-- 你的删除、编辑按钮列 -->
    </Columns>
</asp:GridView>

第二步:后台处理删除/编辑事件

在后台代码里,通过DataKeys集合根据行索引获取对应字段的值:

删除事件示例:

protected void gvDetails_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    // 获取当前触发事件的行索引
    int rowIndex = e.RowIndex;
    
    // 从DataKeys中取出NAME和DESCRIPTION的值
    string name = gvDetails.DataKeys[rowIndex]["NAME"].ToString();
    string description = gvDetails.DataKeys[rowIndex]["DESCRIPTION"].ToString();
    
    // 这里就可以用这两个值执行删除逻辑了,比如调用数据库删除方法
}

编辑事件示例:

protected void gvDetails_RowEditing(object sender, GridViewEditEventArgs e)
{
    // 获取要编辑的行索引
    int rowIndex = e.NewEditIndex;
    
    // 从DataKeys中取出字段值
    string name = gvDetails.DataKeys[rowIndex]["NAME"].ToString();
    string description = gvDetails.DataKeys[rowIndex]["DESCRIPTION"].ToString();
    
    // 接下来可以把这些值传递到编辑页面,或者填充到编辑控件中
}
方法二:通过RowCommand事件结合行索引取值

如果你的删除/编辑按钮是放在TemplateField里的,可以用这种方法,通过按钮的CommandArgument传递行索引,再从行中取值。

第一步:配置前端按钮

在GridView的TemplateField里定义LinkButton,设置CommandName和CommandArgument:

<asp:GridView ID="gvDetails" runat="server" AutoGenerateColumns="false" CellPadding="5"
    OnRowCommand="gvDetails_RowCommand">
    <Columns>
        <asp:BoundField HeaderText="Report Name" DataField="NAME" />
        <asp:BoundField HeaderText="Description" DataField="DESCRIPTION" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton ID="lnkDelete" runat="server" 
                    CommandName="DeleteRow" 
                    CommandArgument='<%# Container.DataItemIndex %>'>
                    删除
                </asp:LinkButton>
                <asp:LinkButton ID="lnkEdit" runat="server" 
                    CommandName="EditRow" 
                    CommandArgument='<%# Container.DataItemIndex %>'>
                    编辑
                </asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

第二步:后台处理RowCommand事件

在后台根据CommandName判断是删除还是编辑,再通过行索引获取字段值:

protected void gvDetails_RowCommand(object sender, GridViewCommandEventArgs e)
{
    // 判断触发的命令类型
    if (e.CommandName == "DeleteRow" || e.CommandName == "EditRow")
    {
        // 把CommandArgument转为行索引
        int rowIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow targetRow = gvDetails.Rows[rowIndex];
        
        // 方法1:如果是BoundField,直接通过单元格索引取值(注意列顺序要对应)
        string name = targetRow.Cells[0].Text; // 假设NAME是第一列
        string description = targetRow.Cells[1].Text; // 假设DESCRIPTION是第二列
        
        // 方法2:如果是TemplateField里的Label控件,用FindControl获取
        // string name = ((Label)targetRow.FindControl("lblName")).Text;
        // string description = ((Label)targetRow.FindControl("lblDescription")).Text;
        
        // 执行对应操作
        if (e.CommandName == "DeleteRow")
        {
            // 执行删除逻辑
        }
        else if (e.CommandName == "EditRow")
        {
            // 执行编辑逻辑
        }
    }
}

注意: 方法二里如果用单元格索引取值,要确保列的顺序不会变动,否则容易取错值;如果用TemplateField的控件,要保证控件ID正确。

内容的提问来源于stack exchange,提问作者Chan Yoong Hon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:39:53