2015-07-21 72 views
0

我正在使用EntityFramework。 DELETE函數將刪除選定的客戶並刷新datagridview,但ADD函數未刷新新添加的客戶的datagridview。任何想法?EF 4.0 Datagridview不更新

public CustomerDialog() 
{ 
    InitializeComponent(); 
    nw = new northwindEntities(); 
} 

private void CustomerDialog_Load(object sender, EventArgs e) 
{ 
    dgvCustomer.DataSource = nw.Customers; 
} 

private void btnDelete_Click(object sender, EventArgs e) 
{ 
    string strSelectedCustomerID = getSelectedCustomerID(); 
    Customer customer = nw.Customers.Where(a => a.CustomerID == strSelectedCustomerID).First(); 
    nw.Customers.DeleteObject(customer); 
    nw.SaveChanges(); 
} 

//the new customer is persist on the database, but the dgvCustomer is not update. 
private void btnAdd_Click(object sender, EventArgs e) 
{ 
    Customer newCustomer = new Customer() { 
      CustomerID = txtCustomerID.Text, 
      CompanyName = txtCompanyName.Text, 
      ContactName = txtContactName.Text 
     }; 
    nw.Customers.AddObject(newCustomer); 
    nw.SaveChanges(); 

    dgvCustomer.DataSource = nw.Customers ; 
    dgvCustomer.Refresh(); 
} 

回答

1
  1. 您可以嘗試調用BindingSource.ResetBindings()方法,你叫SaveChanges()方法之後。

  2. 此外,它可以幫助使用BindingList作爲數據源(請參閱文章的代碼示例如何使用它)。

  3. 醜陋,但是務實的做法:dgvCustomer.DataSource = null; dgvCustomer.DataSource = nw.Customers;

作爲一個側面說明,dgvCustomer.Refresh()不會幫助你在這種情況下。它不會刷新數據綁定,它會導致控件在UI中重新繪製自己,這可能不是您想要的。