如何获取列表框以根据以前的组合框显示其结果。

时间:2017-04-25 01:48:56

标签: c# sql

我正在尝试从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表。因此,当你选择一所大学(例如商业)时,我希望主要的盒子只展示商学院的专业。

1 个答案:

答案 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以查看它的用法。