Заполнение комбинированного списка в соответствии с выбранным индексом из другого комбинированного списка - PullRequest
2 голосов
/ 24 июня 2010

Боже мой, я занимаюсь этим уже два дня, но до сих пор не могу найти решение. Это мой сценарий:

У меня есть три элемента управления списком, и мне нужно загружать данные из набора данных динамически.

  • cbCode1 заполняется формой загрузки.
  • cbCode2 заполняется, когда выбранный индекс из cbCode1 изменяется
  • cbCode3 заполняется, когда выбранный индекс из cbCode1 изменяется

данные поступают из двух полей в наборе данных "description" и "id_code". Поэтому я хочу связать значение описания с его идентификатором. Потому что мне нужно попросить об этом позже ..

В форме загрузки у меня есть это:

cbCode1.DataSource = D.Tables [0]; cbCode1.DisplayMember = D.Tables [0] .Columns ["описание"]. ColumnName; cbCode1.ValueMember = D.Tables [0] .Columns ["id_code"]. ColumnName;

Теперь, когда выбранный индекс из 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;

            }
        }



    }

Этот код не работает, я не знаю, что я делаю неправильно. помогите пожалуйста решить эту проблему?

Заранее спасибо!

Новичок-программист ..

Ответы [ 2 ]

0 голосов
/ 08 ноября 2012

попробуйте сделать это, как показано ниже кода ...

private void Form1_Load (отправитель объекта, EventArgs e) { FillCountry ();

    }

    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";

        }
0 голосов
/ 24 июня 2010

Я не делал этого раньше, но сделал что-то похожее для обзора данных.Что вам нужно сделать, это использовать actionlisteners.В основном заполните первое поле со списком, а затем добавьте в него список действий, чтобы он вызывался при изменении выбранного индекса.В этом списке действий он должен заполнить второе поле со списком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...