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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:27:03