【问题标题】:How to dynamically change combobox on other combobox value change如何在其他组合框值更改时动态更改组合框
【发布时间】:2012-08-02 23:58:58
【问题描述】:

使用 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 重置为新的字段名称?

【问题讨论】:

  • 请告诉我 dc.Suppliers 中的字段错误是抛出 n 因为供应商没有供应商 ID
  • Supplier 有 SupplierID 字段,您可以在 Northwind 数据库示例中验证。

标签: c# winforms linq-to-sql combobox


【解决方案1】:

您只需要返回 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;

【讨论】:

  • 同样的问题,我认为这是与查询无关的组合设置相关的问题。可能我们必须在重新绑定 combobo2 之前将属性 ValueMember 重置为空。
【解决方案2】:

在改变它的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;
        }

【讨论】:

  • 您在答案中初始化 DataSource 而不是 ValueMember
  • 是的,因为初始化 DataSource 会初始化组合框的绑定属性。
猜你喜欢
  • 1970-01-01
  • 2017-05-20
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多