ComboBox 使用数据绑定时 Sorted 属性的bug
2009-06-25 17:15
423 查看
调查一个奇怪的系统异常时发现的这个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。
但是为什么会出现这样奇怪的错误呢?
经过调查发现是因为设置了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。
相关文章推荐
- Asp.net中控件中的NavigateUrl属性使用绑定数据时无效
- silverlight中使用enum给combobox添加数据,enum的description属性
- Xamarin XAML语言教程使用Progress属性数据绑定设置进度条进度
- 使用easyui-combobox的data属性加载定义好在*.js文件中的JSON数据的问题
- [ExtJS5学习笔记]第十六节 Extjs5使用panel新增的ViewModel属性绑定数据
- DataGridView 控件中轻松设置DataGridViewComboBoxColumn数据绑定属性。
- MVVM模式WPF的ComboBox数据绑定,使用Dictionary作为数据源
- C#_WinForm的ComboBox与数据绑定详解(关于Text属性和下拉列表)
- [ExtJS5学习笔记]第十六节 Extjs5使用panel新增的ViewModel属性绑定数据
- 使用NHibernate绑定页面数据时,出现"未能加载视图状态,正在向其中加载视图状态。。。。"的Bug
- [ExtJS5学习笔记]第十六节 Extjs5使用panel新增的ViewModel属性绑定数据
- Xamarin XAML语言教程通过数据绑定使用Progress属性
- 地磅称量系统之(37~39) 直接向数据库的数据表WtBill添加测试数据以及绑定用户控件和使用编码的方式控制dataGridView控件的每列属性和添加数据数据库的表中不存在的字段(非绑定列)
- WPF的ComboBox数据绑定,使用Dictionary作为数据源
- Button控件的CommandName属性和OnCommand事件的使用以及对数据的绑定
- Devexpress 使用comboBoxEdit 和LookUpEditor 控件数据绑定
- Xamarin XAML语言教程使用Progress属性数据绑定设置进度条进度
- asp.net中自定义控件ascx增加自定义属性以及给该属性使用绑定数据的解决方案
- Xamarin XAML语言教程使用Progress属性数据绑定设置进度条进度
- VS+SqlServe 在引用了webservice后刷新数据时提示:已超过传入消息(65536)的最大消息大小配额若要增加配额请使用相应绑定元素上 MaxReceivedMessageSize 属性