ComboBox使用BindingSource做数据源,更改数据源及绑定项时是否会触发SelectedIndexChanged事件?

常常需要写这样的程序:根据一个ComboBox的当前值的变化来做不同的处理(例如根据ComboBox为班级列表,选不同班级则datagridview显示不同班级的所有学生);

这时往往要在combobox的SelectedIndexChanged加相应的代码以显示不同班级的学生。那么selectedindexchange事件的触发条件你知道吗?

 

1、如果你的combobox是通过在设计器中通过设置相关数据源的属性的方式设置的,那么在formload事件中的fill方法中是不会触发selectedindexchange事件的,这时你必须在formload是手动加入显示学生的代码;如果你界面有个按钮,例如点击后就能用数据库的数据刷新当前combobox,那么这时在button_click事件中的fill方法就会触发selectedindexchange;实例代码如下:

 

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace testComboBox2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // TODO: 这行代码将数据加载到表“dataSet1.STA_SET_STE_BASIC”中。您可以根据需要移动或移除它。 this.sTA_SET_STE_BASICTableAdapter.Fill(this.dataSet1.STA_SET_STE_BASIC); // this.sTA_SET_STE_BASICTableAdapter.Fill(this.dataSet1.STA_SET_STE_BASIC);//如果把这句加上,那么这个fill就会触发changed事件了,看来数据集发生了改变才能触发(第一次fill不算改变) } //刷新按钮 private void button1_Click(object sender, EventArgs e) { // TODO: 这行代码将数据加载到表“dataSet1.STA_SET_STE_BASIC”中。您可以根据需要移动或移除它。 this.sTA_SET_STE_BASICTableAdapter.Fill(this.dataSet1.STA_SET_STE_BASIC); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {//buttonclick里的fill转到这里,formload不会 //combobox变化了,在这里处理 } } }

 

 

2、如果你是combobox的数据源时通过代码动态绑定的,则在给combobox.datasource赋值时就会触发selectedIndexchanged事件,也就是说在改变datasource或者重新fill时才会触发这个selectedindexchanged事件。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace testComboBox2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // TODO: 这行代码将数据加载到表“dataSet1.STA_SET_STE_BASIC”中。您可以根据需要移动或移除它。 this.sTA_SET_STE_BASICTableAdapter.Fill(this.dataSet1.STA_SET_STE_BASIC); this.comboBox1.DataSource = this.sTASETSTEBASICBindingSource; this.comboBox1.DisplayMember = "steel_grade"; this.comboBox1.ValueMember = "steel_grade"; } //刷新按钮 private void button1_Click(object sender, EventArgs e) { // TODO: 这行代码将数据加载到表“dataSet1.STA_SET_STE_BASIC”中。您可以根据需要移动或移除它。 this.sTA_SET_STE_BASICTableAdapter.Fill(this.dataSet1.STA_SET_STE_BASIC); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { //把在设计器里的绑定去掉,在代码中动态赋值datasource和displaymember //combobox变化了,在这里处理 } } }

 

总结combobox的datasource属性发生了改变会触发事件,fill方法第二次填充数据集也会触发事件

你可能感兴趣的:(ComboBox使用BindingSource做数据源,更改数据源及绑定项时是否会触发SelectedIndexChanged事件?)