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

已解决:使用Entity Framework实现点击按钮后刷新Datagridview数据

问题原因
  • 你使用的this.Refresh()、this.Invalidate()仅负责强制控件重绘,不会更新DataGridView绑定的数据源,因此无法展示新增数据
  • 你新增数据和查询数据使用了两个独立的EF上下文实例,EF上下文的本地缓存不会自动跨实例同步,且新增完成后你没有重新查询最新数据绑定到控件
  • ToList()返回的普通集合不支持变更通知,即使集合内容发生变化,DataGridView也无法自动感知刷新
解决方案

方案1:新增后重新绑定数据源(实现最简单,适合数据量不大的场景)

将你现有的数据加载逻辑封装为独立方法,在新增数据保存完成后调用该方法即可:

  1. 封装数据绑定方法
private void BindDataGrid()
{
    frachtkostenEntities context = new frachtkostenEntities();
    var item = from p in context.Artikel
                select new
                {
                    Artikelnummer = p.Artikelnummer,
                    Bezeichnung = p.Bezeichnung,
                };
    dgvDisplayDataBase.DataSource = item.ToList();
}
  1. 新增数据完成后调用绑定方法
var contex = new frachtkostenEntities();
try
{
    var x = new Kunden()
    {
        Kundenname = first,
        Zielort = second,
    };

    contex.Kunden.Add(x);
    contex.SaveChanges();
    // 重新加载最新数据并绑定
    BindDataGrid();
}

方案2:使用支持变更通知的绑定集合(性能更优,无需每次全量查询)

使用BindingList作为数据源,该集合实现了变更通知接口,集合内容变更时DataGridView会自动刷新:

  1. 定义对应数据结构的实体类
public class ArtikelDisplay
{
    public int Artikelnummer { get; set; }
    public string Bezeichnung { get; set; }
}
  1. 在窗体级别声明绑定集合
private BindingList<ArtikelDisplay> _artikelBindingList;
  1. 初始化时绑定集合到控件
private void InitDataGrid()
{
    frachtkostenEntities context = new frachtkostenEntities();
    var queryResult = from p in context.Artikel
                select new ArtikelDisplay
                {
                    Artikelnummer = p.Artikelnummer,
                    Bezeichnung = p.Bezeichnung,
                };
    _artikelBindingList = new BindingList<ArtikelDisplay>(queryResult.ToList());
    dgvDisplayDataBase.DataSource = _artikelBindingList;
}
  1. 新增数据后直接往绑定集合添加对应条目即可
var contex = new frachtkostenEntities();
try
{
    var x = new Kunden()
    {
        Kundenname = first,
        Zielort = second,
    };
    contex.Kunden.Add(x);
    contex.SaveChanges();
    // 此处替换为你实际要展示的字段值
    _artikelBindingList.Add(new ArtikelDisplay
    {
        Artikelnummer = x.Artikelnummer,
        Bezeichnung = x.Bezeichnung
    });
}
注意事项

你当前代码中新增的是Kunden表的数据,但DataGridView绑定的是Artikel表的查询结果,如果业务逻辑是要展示客户数据,请将绑定逻辑的查询对象改为context.Kunden,否则新增客户数据不会在控件中展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:18:03