我正在尝试从SQL填充一个组合框,当我从第一个框中选择一个Item时,选项在第二个框中被限制。第一个框有一个选定的索引更改事件,但我似乎无法弄清楚如何限制结果。
这就是我所拥有的:
private void cb_college_SelectedIndexChanged(object sender, EventArgs e)
{
lb_allMajors.Items.Clear();
lb_allMajors.Items.Add(cb_college.SelectedIndex);
}
private void populateMajors()
{
try
{
string SQL;
SQL = "SELECT DISTINCT major_name FROM majors";
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(SQL, conn);
conn.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
lb_allMajors.Items.Add(reader.GetString(0));
}
}
}
catch (SqlException err)
{
MessageBox.Show(err.Message);
}
}
数据库中majors表中的每个专业都有一个大学ID列,链接到Colleges表。因此,当你选择一所大学(例如商业)时,我希望主要的盒子只展示商学院的专业。
答案 0 :(得分:0)
我不是100%完全依赖于您所关注的内容或示例显示的内容,但我认为您只需要为您的populateMajors()
方法提供包含大学ID的参数,或者SelectedIndex,无论你想使用哪个。
例如:
private void cb_college_SelectedIndexChanged(object sender, EventArgs e)
{
populateMajors(cb_college.SelectedIndex); // OR More likely Get College ID from Combobox
}
private void populateMajors(int CollegeId)
{
try
{
string SQL;
SQL = "SELECT DISTINCT major_name FROM majors WHERE <yourcollegeindexcol> = " + CollegeId;
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(SQL, conn);
conn.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
lb_allMajors.Items.Add(reader.GetString(0));
}
}
}
catch (SqlException err)
{
MessageBox.Show(err.Message);
}
}
我怀疑SelectedIndex是发送的正确参数,但是你得到了图片。
您可能会发现使用ComboBox.DataSource属性而不是Items.Add更好 - 在线搜索ComboBox.DataSource以查看它的用法。