使用Access数据库

时间:2018-02-09 09:29:56

标签: c# winforms datatable

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

在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 });

同样的结果。

1 个答案:

答案 0 :(得分:0)

我认为您的代码运行正常,但您可以考虑一些事项。

首先:您必须检查事件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();

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