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。

目录
相关文章
|
8月前
element-Cascader级联选择器用法?
element-Cascader级联选择器用法?
|
JavaScript
jQuery数据结构渲染(4):复选框checkbox赋值
jQuery数据结构渲染(4):复选框checkbox赋值
70 1
element表单嵌套检验+动态添加
element表单嵌套检验+动态添加
331 0
|
前端开发
前端工作总结182-element-ui el-table sortable属性 参数详解
前端工作总结182-element-ui el-table sortable属性 参数详解
422 0
前端工作总结182-element-ui el-table sortable属性 参数详解
|
索引 内存技术 数据安全/隐私保护
|
JavaScript 前端开发
Jquery 动态追加控件并获取值
  先展示通过动态添加控件的结果:     实现步骤: 1.引用js文件 2.引用BootStrap(纯属为了控件好看) 3.画一个Table控件用于存放按钮 控件    ...
1255 0