zoukankan      html  css  js  c++  java
  • ComboBox 使用数据绑定时 Sorted 属性的bug

    调查一个奇怪的系统异常时发现的这个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。

  • 相关阅读:
    Redis持久化
    《Hadoop权威指南·大数据的存储与分析》阅读笔记(未读完)
    《redis设计与实现》第一版 阅读笔记(未看完)
    LSMTree -> SStable 初体验
    Goland实现Set操作
    使用Goland操作Redis详解
    使用Python操作Redis详解
    学习笔记
    docker技术入门与实战 第三版
    Shell(笔记)
  • 原文地址:https://www.cnblogs.com/rick/p/1511120.html
Copyright © 2011-2022 走看看