下拉框(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);

...全文
1348 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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;了吧?

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧