【问题标题】:Populate a combobox using data from Access database使用 Access 数据库中的数据填充组合框
【发布时间】:2018-02-09 09:29:55
【问题描述】:

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

当在 Combobox1 中选择一个项目时,Combobox3 项目将填充来自 Access db 的数据。

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

下面的代码是我目前所拥有的,但它不起作用。

无论我从 Combobox1 中选择什么值,在 Combobox3 中都一无所获。

如果我更改查询使其出错,它确实会引发错误。

    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());

string reference = myRow["Equip No"].ToString();
this.metroComboBox3.Items.AddRange(new object[] { reference });

结果相同。

【问题讨论】:

  • 请包含您使用的语言标签

标签: c# winforms datatable


【解决方案1】:

我认为您的代码运行良好,但您需要注意一些事项。

首先:您必须检查事件metroComboBox1_SelectedIndexChanged 是否与设计器代码中的metroComboBox1 相关联。

this.metroComboBox1.SelectedIndexChanged += new System.EventHandler(this.metroComboBox1_SelectedIndexChanged);

或动态添加

metroComboBox1.SelectedIndexChanged += metroComboBox1_SelectedIndexChanged;

第二:有很多方法可以用数据填充ComboBox,这里有一些。

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

this.metroComboBox3.Items.Add(myRow[0].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());

第三:你必须在第二个ComboBox中清除你之前的项目,这一行已经为你完成了。

metroComboBox3.Items.Clear();

我希望这个问题得到解答。

【讨论】:

  • 你是对的。代码很好,但我在没有意识到的情况下为 [Description] 使用了错误的搜索参数,并认为代码有问题。
猜你喜欢
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
相关资源
最近更新 更多