我有一个带有两个组合框的应用程序。
在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 });
同样的结果。
答案 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();
我希望这个问题得到解答。