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

DBContext首次保存UltraGrid修改无效,后续操作正常的问题排查

UltraGrid首次保存无效果的原因与修复方案

核心原因

  • 控件名称拼写错误:代码里判断激活单元格的是ultraGrid,但执行退出编辑模式操作的是ultraGrid1,控件名不匹配。首次点击保存时,若当前编辑的单元格在ultraGrid,则不会触发退出编辑模式的逻辑,UltraGrid里的修改会留在编辑缓冲区,没同步到BindingSource和DbContext的实体集合,导致SaveChanges()没有可提交的修改。
  • 编辑状态未强制提交:即使控件名正确,若未主动触发BindingSource的提交操作,部分情况下修改可能仍未同步到实体,尤其是首次加载窗体后的第一次编辑。

修复方案

1. 修正控件名称并添加空值判断

把判断和操作的控件名统一,同时避免ActiveCell为null时的空引用异常:

private void btnSave_Click(object sender, EventArgs e)
{
    // 统一控件名,添加空值判断
    if (ultraGrid1.ActiveCell?.Activated ?? false)
    {
        ultraGrid1.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.ExitEditMode);
    }
    _context.SaveChanges();
    _context.Dispose();
    Close();
}

2. 强制提交BindingSource修改

在保存前调用BindingSource.EndEdit(),确保所有编辑的修改都同步到DbContext的实体:

private void btnSave_Click(object sender, EventArgs e)
{
    if (ultraGrid1.ActiveCell?.Activated ?? false)
    {
        ultraGrid1.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.ExitEditMode);
    }
    // 强制提交BindingSource的修改到实体
    ModuleBindingSource.EndEdit();
    _context.SaveChanges();
    _context.Dispose();
    Close();
}

3. 优化DbContext生命周期管理

改用窗体关闭事件释放上下文,避免手动Dispose的潜在问题:

private void btnSave_Click(object sender, EventArgs e)
{
    if (ultraGrid1.ActiveCell?.Activated ?? false)
    {
        ultraGrid1.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.ExitEditMode);
    }
    ModuleBindingSource.EndEdit();
    _context.SaveChanges();
    Close();
}

// 窗体关闭时释放上下文
private void ChildForm_FormClosing(object sender, FormClosingEventArgs e)
{
    _context?.Dispose();
}

内容的提问来源于stack exchange,提问作者ChrisW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:43:21