使用实体框架时如何刷新datagridview?

时间:2015-03-29 12:09:08

标签: c# sql-server database winforms

我正在使用以下代码将datagridview绑定到SQL Server数据库

  POSfinalEntities dbe = new POSfinalEntities();      
  BindingSource bs = new BindingSource();   
  dataProducts.DataSource = null;        
  bs.DataSource = dbe.Book.ToList();      
  dataProducts.DataSource = bs;

没关系。如果我尝试更新数据库,数据库本身就会更新。问题是datagridview。它没有显示变化。我已经尝试了几个小时,只是为了使它工作并失败。

我尝试设置datasource = null并再次将其设置为datasource = bs。 我试过这个.datagridview.refresh,nope。

我找不到一个有效的解决方案。我很抱歉,如果这是一个重复的问题,但我尝试了我可以在这个网站找到的每个解决方案。如果它是重复的。你能否至少提供一个工作解决方案的链接。我真的很绝望。感谢。

更新:这是我用来更新数据库值的代码。我知道,连接是不好的做法,但这不是问题。

private void btneUpdate_Click(object sender, EventArgs e)
{
    if (MessageBox.Show("You are about to save the changes. You won't be able to undo those changes.", "Update fields", MessageBoxButtons.OKCancel) ==   DialogResult.OK)
    {
            eprice = Convert.ToString(numericUpDown3.Value);
            estock = Convert.ToString(numericUpDown4.Value);

            con.Open();

            cmd = new SqlCommand(@"UPDATE Book 
                                      SET BookTitle = '" + txteTitle.Text
                                    + "', BookAuthorLname = '" + txteAuthorLname.Text
                                    + "', BookAuthorFname = '" + txteAuthorFname.Text
                                    + "', BookPrice = '" + Convert.ToDecimal(eprice)
                                    + "', BookDescription = '" + txteDesc.Text
                                    + "', DatePublication = '" + dtpePublished.Value.Date
                                    + "', BookStock = '" + Convert.ToInt32(estock)
                                    + "', isFiction = '" + checkboxbool
                                    + "', GenreID = '" + cmbeCategory.SelectedValue
                                    + "' WHERE ISBN = '" + txteISBN.Text + "';", con);

            cmd.ExecuteNonQuery();
            con.Close();
    }
}

1 个答案:

答案 0 :(得分:1)

您绑定到列表dbe.Book.ToList()。因此,如果向该列表添加项目,则只会刷新数据网格。您应该将列表保存在变量中并更新该列表。

POSfinalEntities dbe = new POSfinalEntities();      
BindingSource bs = new BindingSource();   
dataProducts.DataSource = null; 
List<Book> books = dbe.Book.ToList();  
bs.DataSource = books;
dataProducts.DataSource = bs;

现在,如果您向List添加一本书,它应该会自动刷新。

Book book = new Book();
books.Add(book);

更简洁的方法是绑定到本地

bs.DataSource = dbe.Book.Local.ToBindingList();

现在,如果您向dbe.Book添加对象,您的DataGridView将自动更新。

Book book = new Book();
dbe.Book.Add(book);

注意:方法ToBindingList()是一种扩展方法。您需要添加命名空间System.Data.Entity才能访问此方法。