点击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
相关产品推荐
相关产品推荐

