• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

下拉框(ComboBox)数据绑定时触发了SelectedIndexChanged事件

左直拳 程序员  2006-02-06 02:27:25
我发现,下拉框(ComboBox)数据绑定时会触发SelectedIndexChanged事件。

这就有点不好,按照一般的理解,只有在用鼠标选下拉框的选项时才会触发SelectedIndexChanged事件,现在在数据绑定,也就是初始化阶段就发生,并且有多少个选项就触发多少遍,烦不烦?要知道,我在SelectedIndexChanged事件的处理函数中刷新一个DataGrid的数据源,这样会造成多少资源无谓的浪费?

有什么法子可以避免?比如说,有没有一个属性表明当前下拉框是否正在绑定数据,有的话就可以在SelectedIndexChanged事件的处理函数中直接跳出来,不再往下执行?

找来找去都没有。

有谁知道吗?

我现在处理的方法是在数据绑定前将SelectedIndexChanged事件去掉,绑好后再附加:

selManager.SelectedIndexChanged -= new System.EventHandler(this.selManager_SelectedIndexChanged);
selManager.DataSource = dtManager;
selManager.ValueMember = "id";
selManager.DisplayMember = "name";
selManager.SelectedValue = 0;
selManager.SelectedIndexChanged += new System.EventHandler(this.selManager_SelectedIndexChanged);

...全文
877 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lih163 2006-03-09
SelectionChangeCommitted
回复
zhaiyf 2006-02-07
我也发现过这个问题,不过没解决,呵呵。
回复
ttrice 2006-02-07
试了一下,确实SelectValueChanged也会被触发。

期待更好解决方案
回复
左直拳 2006-02-07
其实也会触发SelectValueChanged事件。

回复
ttrice 2006-02-06
如果你有绑定数据的话,可以使用SelectValueChanged事件,性能会好些。
回复
lovvver 2006-02-06
对于这个问题,你只能够手动处理,就是(你的方法)把这一句放在绑定数据的后面,
selManager.SelectedIndexChanged += new System.EventHandler(this.selManager_SelectedIndexChanged);

当你要刷新ComboBox的数据源时,也先把这个事件去掉,等绑定完,再加上。

这也是比较好的办法了。
回复
左直拳 2006-02-06
不仅仅是这样,我发现

selManager_s.DataSource = dtManager.Copy();
selManager_s.ValueMember = "id";
selManager_s.DisplayMember = "name";
selManager_s.SelectedValue = 0;

这四条语句都会触发SelectedIndexChanged事件,所以共触发了4次,不过并不是有多少个选项就触发多少遍。
回复
MyLf 2006-02-06
是因为你写了 selManager.SelectedValue = 0;了吧?
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2006-02-06 02:27
社区公告

让您成为最强悍的C#开发者