如何将DataGridView当前选中行数据直接保存到数据库无需手动取消选中
解决方案
你尝试的dgv.ClearSelection()、dgv.CurrentCell = null无效,是因为问题本质不是行处于选中状态,而是DataGridView的编辑会话未结束,修改仅停留在UI层,尚未提交到绑定的数据源(DataTable、BindingSource等),所以执行保存逻辑时读取到的还是旧值。
方法1:显式结束编辑(优先推荐)
在打开编辑窗体、或执行保存逻辑前,先执行以下代码提交编辑内容到数据源:
// 结束DataGridView当前的编辑会话 dgv.EndEdit(); // 如果你的DataGridView是通过BindingSource绑定数据,需额外加这一行 if (dgv.DataSource is BindingSource bindingSource) { bindingSource.EndEdit(); }
90%以上的同类场景通过上述代码即可解决,无需手动切换选中行。
方法2:调整编辑触发逻辑(可选,长效优化)
如果想从交互层面避免该问题,可以修改DataGridView的EditMode属性:
- 将默认的
EditOnEnter改为EditOnKeystrokeOrF2,只有用户主动输入或按F2才进入编辑模式,减少意外未提交的编辑会话 - 也可以订阅
CellValueChanged事件,单元格值变更后自动调用EndEdit()提交修改
确实需要取消行选中的实现方案
如果业务要求必须取消当前行选中状态,之前的代码无效是因为DataGridView仍持有焦点,补充一行焦点转移逻辑即可:
dgv.CurrentCell = null; dgv.ClearSelection(); // 将焦点转移到其他控件,比如保存按钮、窗体本身或其他容器控件 this.ActiveControl = saveButton;
内容的提问来源于stack exchange,提问作者Upset0987
相关产品推荐
相关产品推荐

