C# 根据从另一个组合框中选择的索引填充组合框

C# 根据从另一个组合框中选择的索引填充组合框,c#,winforms,C#,Winforms,天哪,我已经做了两天了,但我仍然无法得到解决方案。这是我的设想: 我有三个ComboBox控件,我需要从dataset动态加载数据 cbCode1由加载表单填充 当从cbCode1中选择的索引更改时,将填充cbCode2 当从cbCode1中选择的索引更改时,cbCode3将被填充 数据来自数据集“描述”和“id_代码”中的两个字段。因此,我想将描述的值与其id相关联。因为我需要稍后再询问 在加载形式中,我有以下内容: cbCode1.DataSource=D.Tables[0]; cbCo

天哪,我已经做了两天了,但我仍然无法得到解决方案。这是我的设想:

我有三个ComboBox控件,我需要从dataset动态加载数据

  • cbCode1由加载表单填充
  • 当从cbCode1中选择的索引更改时,将填充cbCode2
  • 当从cbCode1中选择的索引更改时,cbCode3将被填充
数据来自数据集“描述”和“id_代码”中的两个字段。因此,我想将描述的值与其id相关联。因为我需要稍后再询问

在加载形式中,我有以下内容:

cbCode1.DataSource=D.Tables[0]; cbCode1.DisplayMember=D.Tables[0]。列[“说明”]。列名称; cbCode1.VALUEMBER=D.Tables[0]。列[“id\U代码”]。列名称

现在,当cbcode1中选定的索引更改时:

private void cbCode1_SelectedIndexChanged(object sender, EventArgs e)
    {

        // Get dataset from DB
        DataSet D = new DataSet();
        D = reason_get(1, 1, 1); // IdStation, Active, Level

        // Ensure the cbcode2 is cleared
        cbCode2.Items.Clear();
        string SelectedValue = cbCode1.SelectedValue.ToString();

        foreach (DataRow row in D.Tables[0].Rows)
        {


            if (row["id_parent_code"].ToString () == SelectedValue ) 
            {

                cbCode2.DataSource = D.Tables[0];
                cbCode2.DisplayMember = D.Tables[0].Columns["description"].ColumnName;
                cbCode2.ValueMember = D.Tables[0].Columns["id_code"].ColumnName;

                cbCode2.SelectedIndex = 0;

            }
        }



    }
这个代码不起作用,我不知道我做错了什么。请帮忙解决这个问题

提前谢谢


一个新手程序员..

我以前没有这样做过,但我为datagridview做过类似的事情。您需要做的是使用actionlisteners。基本上填充第一个组合框,然后向其中添加actionlistener,以便在所选索引更改时调用它。在actionlistener中,让它填充第二个组合框。

我以前没有这样做过,但我为datagridview做过类似的事情。您需要做的是使用actionlisteners。基本上填充第一个组合框,然后向其中添加actionlistener,以便在所选索引更改时调用它。在actionlistener中,让它填充第二个组合框。

尝试这样做,如下面的代码所示

私有void Form1\u加载(对象发送方、事件参数e) { 填充国家()


尝试这样做,就像下面的代码

私有void Form1\u加载(对象发送方、事件参数e) { 填充国家()


使用比
cbCode1
cbCode2
更好的变量名。使用能实际说明值含义的名称。使用比
cbCode1
cbCode2
更好的变量名。使用能实际说明值含义的名称。
    }

    private void FillCountry()
    {
        string str = "SELECT CountryID, CountryName FROM Country";
        SqlCommand cmd = new SqlCommand(str,con);
        //cmd.Connection = con;
        //cmd.CommandType = CommandType.Text;
       // cmd.CommandText = "SELECT CountryID, CountryName FROM Country";
        DataSet objDs = new DataSet();
        SqlDataAdapter dAdapter = new SqlDataAdapter();
        dAdapter.SelectCommand = cmd;
        con.Open();
        dAdapter.Fill(objDs);
        con.Close();
        comboBox1.ValueMember = "CountryID";
        comboBox1.DisplayMember = "CountryName";
        comboBox1.DataSource = objDs.Tables[0];
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (comboBox1.SelectedValue.ToString() != "")
        {
            int CountryID = Convert.ToInt32(comboBox1.SelectedValue.ToString());
            FillStates(CountryID);
            comboBox3.SelectedIndex = 0;
        }
    }

    private void FillStates(int countryID)
    {
        string str = "SELECT StateID, StateName FROM State WHERE CountryID =@CountryID";
        SqlCommand cmd = new SqlCommand(str, con);
       // SqlConnection con = new SqlConnection(Con);
       //  cmd.Connection = con;          
       // string str="SELECT StateID, StateName FROM State WHERE CountryID =@CountryID";
       // cmd.Connection = con;
        //cmd.CommandType = CommandType.Text;
       // cmd.CommandText = "SELECT StateID, StateName FROM State WHERE CountryID =@CountryID";
        cmd.Parameters.AddWithValue("@CountryID", countryID);
        DataSet objDs = new DataSet();
        SqlDataAdapter dAdapter = new SqlDataAdapter();
        dAdapter.SelectCommand = cmd;
        con.Open();
        dAdapter.Fill(objDs);
        con.Close();
        if (objDs.Tables[0].Rows.Count > 0)
        {
            comboBox2.ValueMember = "StateID";
            comboBox2.DisplayMember = "StateName";
            comboBox2.DataSource = objDs.Tables[0];
        }
    }

    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        int StateID = Convert.ToInt32(comboBox2.SelectedValue.ToString());
        FillCities(StateID);
    }


    private void FillCities(int stateID)
    {
        //SqlConnection con = new SqlConnection(str,con);
        string str = "SELECT CityID, CityName FROM City WHERE StateID =@StateID";
        SqlCommand cmd = new SqlCommand(str,con);
       // cmd.Connection = con;
        //cmd.CommandType = CommandType.Text;
       // cmd.CommandText = "SELECT CityID, CityName FROM City WHERE StateID =@StateID";
        cmd.Parameters.AddWithValue("@StateID", stateID);
        DataSet objDs = new DataSet();
        SqlDataAdapter dAdapter = new SqlDataAdapter();
        dAdapter.SelectCommand = cmd;
        con.Open();
        dAdapter.Fill(objDs);
        con.Close();
        if (objDs.Tables[0].Rows.Count > 0)
        {
            comboBox3.DataSource = objDs.Tables[0];
            comboBox3.DisplayMember = "CityName"; 
            comboBox3.ValueMember = "CItyID";

        }