【问题标题】:Data Grid View won't refresh after updating更新后数据网格视图不会刷新
【发布时间】:2017-06-12 11:18:20
【问题描述】:

我正在用 C# 做简单的数据库客户端。现在我正在使用实体框架,一切似乎都很好,但是在向数据库添加新记录后它不会更新。这是我的代码:

        private void AddClientConfirmButton_Click(object sender, EventArgs e)
    {
        MainForm frm = new MainForm();
        var newClient = new Klienci
        {
            Imie = FirstNameTextBox.Text,
            Nazwisko = LastNameTextBox.Text,
            Adres = AdressTextBox.Text,
            Telefon = TelephoneTextBox.Text,
            Email = EmailTextBox.Text,
            Status = StatusComboBox.Text
        };
        frm.UpdateDb(newClient);
        Close();
    }

这里是 UpdateDb 方法:

        public void UpdateDb(Klienci newClient)
    {
        var dataContext = new BAKKEntities();
        dataContext.Klienci.Add(newClient);
        dataContext.SaveChanges();
        dataContext.Dispose();
        LoadData();
    }

还有 LoadData:

        public void LoadData()
    {
        var dataContext = new BAKKEntities();
        var clientList = from r in dataContext.Klienci
                         select new
                         {
                             Imie = r.Imie,
                             Nazwisko = r.Nazwisko,
                             Adres = r.Adres,
                             Telefon = r.Telefon,
                             Email = r.Email,
                             Status = r.Status,
                         };
        BindingSource bs = new BindingSource();
        bs.DataSource = clientList.ToList();
        ClientsDataGridView.DataSource = bs;
        dataContext.Dispose();
    }

如果我想刷新数据,我必须再次运行我的程序,这不太舒服

【问题讨论】:

  • 我不知道该类是否存在该方法,但请尝试.ToBindingList()而不是.ToList()
  • 不存在
  • 你考虑过用 WPF 代替 winforms 吗? WPF 的数据绑定在您习惯之后简直令人惊叹。

标签: c# .net entity-framework datagrid


【解决方案1】:

只要设置为null,然后赋值,

 BindingSource bs = new BindingSource();
 bs.DataSource = clientList.ToList();
 ClientsDataGridView.DataSource = null;
 ClientsDataGridView.DataSource = bs;
 dataContext.Dispose();

【讨论】:

    【解决方案2】:

    试试这个:

    bs.ResetBindings(false);
    ClientsDataGridView.DataSource = typeof(List); 
    ClientsDataGridView.DataSource = bs;
    

    【讨论】:

      【解决方案3】:

      要像 Noceo 所说的那样使用 ToBindingList(),你必须导入 System.Data.Entity。 做类似的事情:

      DataContext.Klienci.Load()
      

      用于加载所有客户端,并且:

      bs.Datasource = DataContext.Klienci.Local.ToBindingList()
      

      链接到您的数据绑定。之后,它将更新。

      【讨论】:

        【解决方案4】:

        不要将List<T> 分配给您的BindingSource.DataSource,而是将BindingList 分配给它。

        您不必每次想为您更新Klienci 的集合DataGridView 时都创建一个新的BindingSource。在初始化期间只执行一次并将BindingList<T> 分配给BindingSource.DataSource

        以下仅在初始化期间进行(InitializeComponent()?)

        DataGridView myDataGridView = new DataGridView();
        BindingSouce myBindingSource = new BindingSource();
        myDataGridView.DataSource = myBindingSource();
        

        当您需要用所有 Klienci 重新填充 DataGridView 时:

        using (var dataContext = new BAKKEntities())
        {
            IEnumerable<Klienci> clients = dataContext.Klienci
                .Select(client => new Klienci()
                {
                    Imie = client.Imie,
                    Nazwisko = client.Nazwisko,
                    Adres = client.Adres,
                    Telefon = client.Telefon,
                    Email = client.Email,
                    Status = client.Status,
                 });
             myBindingsource.DataSource = new BindingList<Klienci>(clients.ToList())
        }
        

        抱歉,我使用的是 linq 方法语法,我对此比较熟悉。最重要的是您将检索到的 Klienci 序列转换为 BindingList,然后将其分配给已连接到 DataGridView.DataSource 的 BindingSource。

        您可能会发现以下有用的Stackoverflow: List vs BindingList Advantages/DisAdvantages

        您是否注意到我使用了using 声明。这是为了确保您的 DataContext 已被释放,即使您有异常。

        顺便说一句:如果您希望您的数据网格视图可排序,请考虑使用SortableBindingList。用法和BindingList一样,只是你

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-12
          • 2016-06-22
          • 1970-01-01
          相关资源
          最近更新 更多