好吧这是一个极其简单的问题,但是昨天硬控了我半天才找到解决方案。
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; }
浙公网安备 33010602011771号