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

C#中使用EF更新数据后,DataGridView无法更新刷新的问题求助

解决EF更新后DataGridView无法同步的问题

问题根源分析

你的代码存在几个关键问题导致DataGridView无法同步更新:

  1. EF上下文未保存更改:tr.Update(item)仅标记实体为修改状态,未将更改持久化到数据库,load()自然拿不到新数据。
  2. 低效的实体查找方式:遍历所有实体匹配ID,性能差且没必要。
  3. 数据加载时的内存排序:AsEnumerable()先把全表数据拉到内存再排序,既影响性能,也可能因为上下文缓存拿到旧数据。
  4. 空catch块:隐藏了加载数据时的异常,无法排查潜在问题。

修改后的代码实现

1. 优化更新操作代码

// 直接根据ID查询目标实体,避免遍历全表
var targetItem = tr.GetAll().FirstOrDefault(item => item.ID == id);
if (targetItem != null)
{
    targetItem.Status = "Approved"; // 修正拼写错误:Aproved → Approved
    tr.Update(targetItem);
    tr.SaveChanges(); // 必须调用此方法将更改写入数据库
    load(); // 所有更新完成后统一重新加载数据
}

2. 修正数据加载方法

private void load()
{
    try
    {
        // 移除AsEnumerable(),让排序逻辑在数据库层面执行,提升性能并确保数据最新
        var query = from t in ffe.tbl_Partners
                    where t.Status == "UnProved"
                    orderby t.ID descending
                    select new
                    {
                        t.ID,
                        t.Partner_Name,
                        t.Advanced_Amount,
                        t.Date,
                        t.Tbl_Project.Project_Name,
                        t.Status
                    };
        dt = query.ToList().ToDataTable();

        // 先清空BindingSource再赋值,确保DataGridView识别数据源变化
        tblPartnersBindingSource.DataSource = null;
        tblPartnersBindingSource.DataSource = dt;
        advancedDataGridView1.DataSource = tblPartnersBindingSource;
        
        // 强制DataGridView刷新UI
        advancedDataGridView1.Refresh();
    }
    catch (Exception ex)
    {
        // 替换空catch,捕获并显示异常,方便排查问题
        MessageBox.Show($"加载数据失败:{ex.Message}");
    }
}

额外注意事项

  • DbContext缓存问题:如果ffe是长期复用的DbContext实例,可能会缓存旧数据。建议每次load()时创建新的DbContext实例,或者在更新后调用ffe.Entry(targetItem).Reload()刷新实体。
  • GetAll()方法的返回类型:确保tr.GetAll()返回的是IQueryable<tbl_Partners>,这样FirstOrDefault会在数据库层面执行查询,而非内存遍历。
  • 状态值拼写一致性:统一使用"Approved"和"UnProved",避免因拼写错误导致数据过滤异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:15:34