2016-12-15 45 views
1

我的表單中有一個綁定源控件。我利用表單中的綁定源current_changed事件來完成一些特殊任務,我面臨的問題是,在form_Load事件中,我將一個列表作爲此綁定源的數據源,並且current_changed事件已被多次調用。爲什麼這樣?綁定源控件

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     List<Employee> listEmployee = new List<Employee>(); 
     for (int i = 1; i <= 10; i++) 
     { 
      Employee emp = new Employee(); 
      emp.EmployeeName = "user" + i; 
      emp.EmployeeAddress = "Address" + i; 
      listEmployee.Add(emp); 
     } 
     bindingSource1.DataSource = listEmployee; 
     dataGridView1.DataSource = bindingSource1; 
    } 

    private void bindingSource1_CurrentChanged(object sender, EventArgs e) 
    { 
     MessageBox.Show("Hai"); 
    } 
} 
public class Employee 
{ 
    private string Name; 
    private string Address; 

    public string EmployeeName { 
     get {return Name;} 
     set { Name = value; } 
    } 

    public string EmployeeAddress 
    { 
     get { return Address; } 
     set { Address = value; } 
    } 
} 
+0

您是否一次添加一個項目? – stuartd

+0

否我創建一個列表並將此列表作爲綁定源控件的數據源。但多次調用current_changed事件(僅在表單加載時)。一旦表單被加載,它正常工作 –

+1

文檔確實表示CurrentChanged被引發_「[當]基礎列表的成員資格發生變化時,這會導致位置引用另一個項目」_「,該項目必須觸發更改數據源。您可以在'Form_Load'中設置一個'loading'標誌,並用它來忽略事件,或者 - 可能更好 - 在數據加載完成後連接事件。 – stuartd

回答

0

對於我的特殊情況,我在頁面加載時創建了一個標誌,並且不止一次地阻止了currentchanged事件的執行。我找不到任何其他解決方法。