C#嵌套GridView中子GridView无法进入编辑模式问题求解
嵌套GridView子控件无法进入编辑模式解决方案
你现有代码的核心问题是:设置子GridView的编辑索引后仅重新绑定了主GridView,未单独绑定当前触发事件的子GridView,主GridView重绑后会重置所有子控件状态,导致编辑索引配置失效。可按以下步骤排查修复:
- 修正事件内绑定逻辑,先给当前子GridView绑定自身数据源,不需要刷新主GridView时可注释主GridView的重绑逻辑,修改后代码如下:
protected void ChildGridView_RowEditing(object sender, GridViewEditEventArgs e) { GridView g2 = (GridView)sender; g2.EditIndex = e.NewEditIndex; // 替换为你自身的子GridView数据源获取逻辑,可传入当前子GridView对应主行的主键参数筛选数据 g2.DataSource = GetChildData(g2.NamingContainer as GridViewRow); g2.DataBind(); // 无特殊需求可注释下方主GridView重绑逻辑,避免子控件状态被覆盖 // BOGridView.DataBind(); }
- 检查aspx页面配置,确认子GridView标签正确声明了
OnRowEditing="ChildGridView_RowEditing"属性,同时配置了DataKeyNames属性存储子表主键。 - 检查页面
Page_Load逻辑,确保主GridView的首次绑定逻辑包裹在!IsPostBack判断内,避免每次回传都重绑主GridView清空子控件状态:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BOGridView.DataSource = GetMainGridData(); BOGridView.DataBind(); } }
- 检查子GridView编辑按钮配置,自带编辑按钮直接使用CommandField即可,自定义编辑按钮需要设置
CommandName="Edit",否则无法触发RowEditing事件。
如果上述步骤完成后仍未生效,可在ChildGridView_RowEditing方法内加断点确认事件是否触发:
- 事件未触发:若子GridView是在主GridView的
RowDataBound事件中动态生成的,需要在生成时手动绑定RowEditing事件。 - 事件触发但编辑模式未生效:检查子GridView数据源是否正常返回,无空值或异常导致绑定失败。
内容的提问来源于stack exchange,提问作者Jacknife
相关产品推荐
相关产品推荐

