如何通过外部Button调用GridView中CommandField声明的Edit命令?
通过外部按钮触发GridView的Edit命令实现方案
可以实现外部按钮调用GridView的编辑逻辑,核心是通过设置GridView的EditIndex属性并重新绑定数据,模拟CommandField编辑按钮的触发效果。
第一步:修正ASPX代码的语法错误
你的CheckBoxField存在属性未闭合的问题,先修正:
<asp:GridView ID="GVtable_1_2_1" runat="server" DataSourceID="ADStable_1_2_1" AutoGenerateColumns="False" EmptyDataText="No records to show."> <Columns> <asp:CommandField ShowEditButton="True" /> <asp:BoundField DataField="Fields" HeaderText="Fields" SortExpression="Fields" /> <asp:BoundField DataField="Size" HeaderText="Size" SortExpression="Size" /> <asp:CheckBoxField DataField="Owning" HeaderText="Owning" SortExpression="Owning" /> </Columns> </asp:GridView> <asp:AccessDataSource ID="ADStable_1_2_1" runat="server" DataFile="D:\Projects\DB_projects.accdb" SelectCommand="SELECT [Fields], [Size], [Owning] FROM [table_1_2_1]" UpdateCommand="UPDATE [table_1_2_1] SET [Fields]=@Fields, [Size]=@Size, [Owning]=@Owning"> </asp:AccessDataSource> <!-- 外部触发按钮 --> <asp:Button ID="Button1" runat="server" Text="编辑第一行" OnClick="Button1_Click" />
第二步:实现按钮点击事件逻辑
在后台代码中,指定要编辑的行索引,重新绑定数据即可进入编辑模式:
protected void Button1_Click(object sender, EventArgs e) { // 设置要编辑的行索引(示例为第一行,索引从0开始) GVtable_1_2_1.EditIndex = 0; // 重新绑定数据,触发编辑状态 GVtable_1_2_1.DataBind(); }
扩展:动态选择编辑行
如果需要让用户选择要编辑的行,可以添加DropDownList控件加载行索引,再在按钮点击时获取选择值:
<asp:DropDownList ID="ddlRowIndex" runat="server" OnInit="ddlRowIndex_Init"></asp:DropDownList> <asp:Button ID="ButtonEditSelected" runat="server" Text="编辑选中行" OnClick="ButtonEditSelected_Click" />
后台代码:
protected void ddlRowIndex_Init(object sender, EventArgs e) { // 加载GridView的行索引到下拉框 for (int i = 0; i < GVtable_1_2_1.Rows.Count; i++) { ddlRowIndex.Items.Add(new ListItem($"第{i+1}行", i.ToString())); } } protected void ButtonEditSelected_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(ddlRowIndex.SelectedValue)) { int rowIndex = int.Parse(ddlRowIndex.SelectedValue); GVtable_1_2_1.EditIndex = rowIndex; GVtable_1_2_1.DataBind(); } }
补充:触发Update/Cancel命令逻辑
- 触发Update:调用
UpdateRow方法更新指定行,之后退出编辑状态
protected void ButtonUpdate_Click(object sender, EventArgs e) { // 更新当前编辑的行 GVtable_1_2_1.UpdateRow(GVtable_1_2_1.EditIndex, true); // 退出编辑状态 GVtable_1_2_1.EditIndex = -1; GVtable_1_2_1.DataBind(); }
- 触发Cancel:设置
EditIndex = -1并重新绑定,退出编辑状态
protected void ButtonCancel_Click(object sender, EventArgs e) { GVtable_1_2_1.EditIndex = -1; GVtable_1_2_1.DataBind(); }
内容的提问来源于stack exchange,提问作者Eninede
相关产品推荐
相关产品推荐

