0

使用 linq to sql 模型运行项目,并将我的组合绑定到 bindingsource 控件,我有两个组合框,第一个显示一个显示数据库表名称(ID、TableName)的表,第二个应该绑定到第一个组合中的选定表,我试过这段代码:

        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 = "SupplierID"; : System.ArgumentException 未处理 Message=不可能链接到新的 Value 成员。请问如何将 combobox2.ValueMember 重置为新的字段名称?

4

2 回答 2

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;
于 2012-08-03T00:42:10.650 回答
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;
        }
于 2012-08-03T01:28:13.103 回答