C# 使用Access数据库中的数据填充组合框

C# 使用Access数据库中的数据填充组合框,c#,winforms,datatable,C#,Winforms,Datatable,我有一个带有两个组合框的应用程序 在Combobox1中选择项目时,Combobox3项目将填充Access db中的数据 Combobox1中的每个选择在Combobox3中都有不同的结果 下面的代码是我到目前为止的代码,但它不起作用 无论我从Combobox1中选择什么值,我在Combox3中都没有得到任何结果 如果我更改查询使其出错,它会抛出一个错误 public void metroComboBox1_SelectedIndexChanged(object sender, Eve

我有一个带有两个组合框的应用程序

在Combobox1中选择项目时,Combobox3项目将填充Access db中的数据

Combobox1中的每个选择在Combobox3中都有不同的结果

下面的代码是我到目前为止的代码,但它不起作用

无论我从Combobox1中选择什么值,我在Combox3中都没有得到任何结果

如果我更改查询使其出错,它会抛出一个错误

    public void metroComboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.metroTabPage1.Controls.Add(this.metroLabel11);

        try
        {
            OleDbConnection myConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\server\databases\db2010.accdb;Persist Security Info=False;");
            myConn.Open();
            OleDbCommand myQuery = new OleDbCommand("Select [Equipment] from [Test Equipment] where [Description] = '" + this.metroComboBox1.Text + "';", myConn);
            OleDbDataReader reader = myQuery.ExecuteReader();


            DataTable dt = new DataTable();
            dt.Load(reader);

            foreach (DataRow myRow in dt.Rows)
            {
                string reference = myRow["Equipment"].ToString();
                this.metroComboBox3.Items.AddRange(new object[] { reference });
                //this.metroComboBox3.Items.Add(myRow["Equipment"].ToString());
            }
            myConn.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Ex: " + ex);
        }
        this.metroComboBox3.Items.Add("Other");
        this.metroTabPage1.Controls.Add(this.metroComboBox3);
    }
我试过了

this.metroComboBox3.Items.Add(myRow["Equip No"].ToString());


同样的结果。

我认为您的代码工作得很好,但有几件事需要考虑

首先:您必须检查事件
MetroCombox1\u SelectedIndexChanged
是否与设计器代码中的
MetroCombox1
链接

this.metroComboBox1.SelectedIndexChanged += new System.EventHandler(this.metroComboBox1_SelectedIndexChanged);
或者动态添加它

metroComboBox1.SelectedIndexChanged += metroComboBox1_SelectedIndexChanged;
第二:有很多方法可以用数据填充组合框,下面是一些方法

this.metroComboBox3.Items.Add(myRow["Equipment"].ToString());

或者不使用
foreach
并使用Linq

DataTable dt = new DataTable();
dt.Load(reader);
List<DataRow> list = dt.AsEnumerable().ToList();
this.metroComboBox3.Items.AddRange(list.Select(x => x[0].ToString()).ToArray());

我希望这个问题能得到回答。

请附上您使用的语言标签。您是正确的。代码很好,但我在没有意识到的情况下为[Description]使用了错误的搜索参数,并且认为代码有问题。
this.metroComboBox3.Items.Add(myRow[0].ToString());
DataTable dt = new DataTable();
dt.Load(reader);
List<DataRow> list = dt.AsEnumerable().ToList();
this.metroComboBox3.Items.AddRange(list.Select(x => x[0].ToString()).ToArray());
metroComboBox3.Items.Clear();