2016-12-15 68 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事件的执行。我找不到任何其他解决方法。