王旁青头戋五一

博客园 首页 新随笔 联系 订阅 管理

好吧这是一个极其简单的问题,但是昨天硬控了我半天才找到解决方案。

private void button3_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("col1");
    dt.Columns.Add("col2");

    dt.Rows.Add("a", 2);
    dt.Rows.Add("b", 3);
    dt.Rows.Add("c", 4);

    comboBox1.DisplayMember = "col1";
    comboBox1.ValueMember = "col2";
    comboBox1.DataSource = dt;

    comboBox2.DisplayMember = "col1";
    comboBox2.ValueMember = "col2";
    comboBox2.DataSource = dt;

    comboBox1.SelectedIndex = 1;
}

以上代码中,不同下拉框绑定了同一个DataTable,最后一句手动改变了第一个下拉框的值,但是结果是第二个下拉框的值也随之一起改变到index为1的item。但是现在的需求是每个下拉框都需要独立的操控自己的数据源。想要取消这种绑定,可以在绑定DataSource的时候赋值dt.Copy,或者绑定完后再给每个下拉框的BindingContext属性新创建一个BindingContext对象,这样两个下拉框的BindingContext就会不同,选项的更新也不会联动了。

private void button3_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("col1");
    dt.Columns.Add("col2");

    dt.Rows.Add("a", 2);
    dt.Rows.Add("b", 3);
    dt.Rows.Add("c", 4);

    comboBox1.DisplayMember = "col1";
    comboBox1.ValueMember = "col2";
    comboBox1.DataSource = dt.Copy();   // 这里去调用Copy方法创建一个全新的、数据和dt相同的DataTable对象,下面也是如此

    comboBox2.DisplayMember = "col1";
    comboBox2.ValueMember = "col2";
    comboBox2.DataSource = dt.Copy();

    comboBox1.SelectedIndex = 1;
}

 

posted on 2025-12-18 11:37  王旁青头戋五一  阅读(0)  评论(0)    收藏  举报