ComboBox绑定DataTable数据,用户选中项后触发事件异常,之二!

ComboBox绑定DataTable数据,用户选中项后触发事件异常,之二!,第1张

概述又遇到这个问题。 用之前的方法,SelectionChangeCommitted 还是有点小问题。 参考:之前的文章 继续搜索到:http://www.cnblogs.com/Bonizlee/archive/2011/05/24/2054942.html ComboBox最经常使用的事件就是SelectedIndexChanged。但在将ComboBox绑定到某个数据源的过程中,会触发Selec

又遇到这个问题。

用之前的方法,SelectionChangeCommitted 还是有点小问题。

参考:之前的文章

继续搜索到:http://www.cnblogs.com/Bonizlee/archive/2011/05/24/2054942.html

ComboBox最经常使用的事件就是SelectedindexChanged。但在将ComboBox绑定到某个数据源的过程中,会触发SelectedindexChanged
事件,而这个时候用户并没有选择内容,其SelectedValue也不是对应字段的值。那么时写在SelectedindexChanged中的处理代码就会因为SelectedValue的内容不正确引发异常。
一般网上找到的方法是添加一个标记位,在绑定前设置为false,绑定完成后设置回true。

voID BindComboBox()
{
flag
=false;
ComBoxBox1.ValueMember
"ValueColumn;
ComBoxBox1.displayMember
displayColumn;
ComBoxBox1.DataSource
Datatable1;
flag
true;
}

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

这个方法涉及到 多一个变量 flag 每个窗体都要改动。

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

BindComboBox()
{
去除委托ComboBox1.SelectedindexChanged -=new EventHandler(ComboBox1_SelectedindexChanged);
ComboBox1.DataSource
null;
ComboBox1.ValueMember
;
ComboBox1.DataSource
Datatable1;
添加委托 += EventHandler(ComboBox1_SelectedindexChanged);
ComboBox1.displayMember
;
}

委托呢,vb.net比较麻烦,跟何况初始化ComboBox是写到另外一个模块里面的函数里面。

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

网友评论中的一个关键点:

在事件中可以判斷 ContainsFocus 屬性來確定是否用戶觸發...先试一试看看。

总结

以上是内存溢出为你收集整理的ComboBox绑定DataTable数据,用户选中项后触发事件异常,之二!全部内容,希望文章能够帮你解决ComboBox绑定DataTable数据,用户选中项后触发事件异常,之二!所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1283850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存