ComboBox绑定数据源时触发SelectedIndexChanged事件的处理办法

发布时间:2019-09-19编辑:佚名阅读(1212)

ComboBox最经常使用的事件就是SelectedIndexChanged。但在将ComboBox绑定到某个数据源的过程中,会触发SelectedIndexChanged事件,而这个时候用户并没有选择内容,其SelectedValue也不是对应字段的值。那么时写在SelectedIndexChanged中的处理代码就会因为SelectedValue的内容不正确引发异常。

一般网上找到的方法是添加一个标记位,在绑定前设置为false,绑定完成后设置回true。

绑定到ComboBox

void BindComboBox()
{
    flag=false;
    ComboxBox1.ValueMember="ValueColumn";
    ComboxBox1.DisplayMember="DisplayColumn";
    ComboxBox1.DataSource=DataTable1;
    flag=true;
}

事件处理

private void ComboxBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if(flag)
    {
        //Do something
    } 
}

另外还有一种办法,就是在绑定前,将SelectedIndexChanged的委托去掉,等绑定完成后,再添加事件委托。

增减委托绑定

void BindComboBox()
{ 
    //去除委托
    ComboBox1.SelectedIndexChanged -=new EventHandler(ComboBox1_SelectedIndexChanged); 
    ComboBox1.DataSource =null;
    ComboBox1.ValueMember ="ValueColumn"; 
    ComboBox1.DataSource = DataTable1;
    //添加委托 
    ComboBox1.SelectedIndexChanged +=new EventHandler(ComboBox1_SelectedIndexChanged);
    ComboBox1.DisplayMember ="DisplayColumn";
}

两种方法都可以,但是之间的优劣暂时没去比较。感觉好像处理一下委托会好点。因为这种办法真的减少了事件的激发次数。

  关键字:ComboBox绑定数据源触发SelectedIndexChanged事件处理办法


鼓掌

0

正能量

0

0

呵呵

0


评论区