2012-08-02 88 views
0

运行与LINQ to SQL的模型项目,并结合我的连击BindingSource的控件,我有两个组合框,首先显示的表给出了数据库表名(ID,表名)和第二应绑定到在第一个组合所选择的表,我想这样的代码:如何动态地改变其他组合框的值改变组合框

 private void ComboBox1_TextChanged(object sender, EventArgs e) 
    { 
     if (ComboBox1.Text == "Customers") 
     { 
      var qry = (from u in dc.Customers 
         select u).ToList(); 
      comboBox2.ValueMember = "CustomerID"; 
      comboBox2.DisplayMember = "CompanyName"; 
      comboBox2.DataSource = qry; 
     } 
     if (ComboBox1.Text == "Suppliers") 
     { 
      var qry = (from u in dc.Suppliers 
         select u).ToList(); 
      comboBox2.ValueMember = "SupplierID"; 
      comboBox2.DisplayMember = "CompanyName"; 
      comboBox2.DataSource = qry; 
     } 
    } 

有了上面的代码,我可以显示第一个组合项目,我也可以显示在默认情况下第二个组合的项目,但当我改变了第一个组合内容,我得到错误的comboBox2.ValueMember =“供应商ID”;信息:System.ArgumentException了未处理 消息=链接到不可能的新值构件。请如何将combobox2.ValueMember重置为新字段名称?

+0

请告诉我场里面dc.Suppliers错误是扔N,因为供应商没有供应商ID在它 – HatSoft 2012-08-03 00:03:58

+0

供应商是否有供应商ID字段中,可以确认在Northwind数据库样本。 – 2012-08-03 00:10:28

回答

0

,有必要改变其ValueMember之前初始化组合框的属性,就像这样:

 **comboBox2.DataSource = null;** 
     if (ComboBox1.Text == "Customers") 
     { 
      var qry = (from u in dc.Customers 
         select new { u.CustomerID, u.CompanyName }).ToList(); 
      comboBox2.ValueMember = "CustomerID"; 
      comboBox2.DisplayMember = "CompanyName"; 
      comboBox2.DataSource = qry; 
     } 
     if (ComboBox1.Text == "Suppliers") 
     { 
      var qry = (from u in dc.Suppliers 
         select new { u.SupplierID, u.CompanyName }).ToList(); 
      comboBox2.ValueMember = "SupplierID"; 
      comboBox2.DisplayMember = "CompanyName"; 
      comboBox2.DataSource = qry; 
     } 
+0

要初始化的数据源在你的答案,而不是ValueMember – HatSoft 2012-08-03 07:45:50

+0

是因为初始化数据源初始化组合框的绑定属性。 – 2012-08-03 13:46:26

0

您需要为ValueMember &只返回列DisplayMember

var qry = (from u in dc.Suppliers 
      select new { a.SupplierID, a.CompanyName}).ToList(); 
      comboBox2.ValueMember = "SupplierID"; 
      comboBox2.DisplayMember = "CompanyName"; 
      comboBox2.DataSource = qry; 
+0

同样的问题,我认为这是与组合设置不相关的查询问题。可能是我们必须在重新绑定combobo2之前将属性ValueMember重置为空。 – 2012-08-03 01:18:21

相关问题