ComboBox 使用数据绑定时 Sorted 属性的bug

简介: 调查一个奇怪的系统异常时发现的这个bug,现象就是用户在ComboBox里面选择一项后,程序在SelectIndexChanged 事件中根据用户选择刷新数据时出现错误。跟踪调试后才发现原来是SelectedValue 值和用户选择的Item项不一致。

调查一个奇怪的系统异常时发现的这个bug,现象就是用户在ComboBox里面选择一项后,程序在SelectIndexChanged 事件中根据用户选择刷新数据时出现错误。跟踪调试后才发现原来是SelectedValue 值和用户选择的Item项不一致。

但是为什么会出现这样奇怪的错误呢?
经过调查发现是因为设置了ComboBox的Sorted属性引起的。

重新的测试代码如下:

 

 1  private   void  comboBox1_SelectedIndexChanged( object  sender, EventArgs e)
 2          {
 3              DataRowView drv  =  comboBox1.SelectedItem  as  DataRowView;
 4              label1.Text  =   string .Format( " Value: {0} == {1} ? " , comboBox1.SelectedValue, drv.Row[ " ID " ]);
 5          }
 6 
 7           private   void  frmTest_Load( object  sender, EventArgs e)
 8          {
 9              DataTable dt  =   new  DataTable();
10              dt.Columns.Add( " ID " typeof ( int ));
11              dt.Columns.Add( " Name " typeof ( string ));
12              dt.Rows.Add( 1 " f - 1 " );
13              dt.Rows.Add( 2 " e - 2 " );
14              dt.Rows.Add( 3 " d - 3 " );
15              dt.Rows.Add( 4 " c - 4 " );
16              dt.Rows.Add( 5 " b - 5 " );
17              dt.Rows.Add( 6 " a - 6 " );
18              
19              comboBox1.DataSource  =  dt;
20              comboBox1.ValueMember  =   " ID " ;
21              comboBox1.DisplayMember  =   " Name " ;            
22          }

 

在ComboBox里面选择 a -6 的话,SelectedValue 是 1 。

实际上因为设置了Sorted属性为true。 a - 6 显示在第一个了,也就是说 SelectedIndex 是 1.

通过测试发现, SelectedValue的值 是按照原始DataTable中Row的顺序获取的。

但是通过 SelectedItem 获取的 ID 值是 6 ,这是正确的。所以SelectedItem的赋值还是正确的。

估计这应该是微软的一个bug,但奇怪的是为什么没有两个一起错,而是一个错一个对。

实验环境:

VS2005 Vista .Net Framework 3.5 SP1 v2.0.50727.3074 。

有其它环境的朋友可以试试在其它版本的框架中是否也有同样的bug。

目录
相关文章
STM32 ST-LINK Utility程序烧录方法
STM32 ST-LINK Utility程序烧录方法
6720 0
人工智能 缓存 前端开发
6454 22
人工智能 JavaScript 开发工具
3385 6
缓存 JavaScript Shell
1597 2
开发工具 Swift git
1261 1
Shell API 调度
902 2
|
14天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
2147 121
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
|
15天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
1823 13
安全 机器人 API
665 2

热门文章

最新文章