我正在使用以下代码将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();
}
}
答案 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才能访问此方法。