Есть ли способ получить идентификатор после каскадного множественного списка, не используя идентификатор в качестве ценностного элемента списка? - PullRequest
0 голосов
/ 25 марта 2019

Мне нужно получить productID из таблицы продуктов и передать его в текстовое поле. Но я хочу выбрать идентификатор продукта путем каскадного текста comboBox в качестве параметров запроса SQL.

Я пытался каскадировать комбинированные списки. Каскадирование работает нормально и отображает то, что мне нужно.

Я провел некоторые исследования каскадного комбинированного списка. Вот две полезные ссылки, которые я обнаружил.

каскадный комбинированный список в форме окна с использованием c #

заполнить текстовое поле во втором выделенном списке, изменено в каскадном комбинированном окне в форме окна с помощью c #

В обеих ссылках я не нашел ответа на свой вопрос.

Вот демонстрационная таблица

ProductID Category                       SubCategory          Item
--------- ------------------------------ -------------------- ----------------
1         Pen                            Ballpoint            Matadoor
2         Pencil                         HB                   Natraz

Я хочу получить значения ProductID, выбрав Category, SubCategory, Item, используя каскадные комбинированные списки.

Вот некоторый демонстрационный код, который заботится о каскадировании.

1-й комбинированный список:

public InventroyAddForm()
{

    InitializeComponent();
    string maincon = ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString;
    string query1 = "select * from Product";
    string query2 = "select * from PartySpecificPrice";
    SqlConnection con = new SqlConnection(maincon);
    SqlCommand com = new SqlCommand(query1, con);
    //con.Open();
    SqlDataAdapter adp = new SqlDataAdapter(com);
    DataTable dt = new DataTable();
    adp.Fill(dt);
    comboBox2.ValueMember = "Category";
    comboBox2.DisplayMember = "Category";
    comboBox2.DataSource = dt;
    //con.Close();
    comboBox3.Enabled = false;
    comboBox4.Enabled = false;

}

2-й комбинированный список:

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
   if(comboBox2.SelectedValue.ToString() != null)
   {
     string maincon = ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString;
     string query1 = "select * from Product where Category=@Category";
     SqlConnection con = new SqlConnection(maincon);
     SqlCommand com1 = new SqlCommand(query1, con);
     //con.Open();
     com1.Parameters.AddWithValue("@Category",comboBox2.SelectedValue.ToString());
     SqlDataAdapter adp1 = new SqlDataAdapter(com1);
     DataTable dt1 = new DataTable();
     adp1.Fill(dt1);
     comboBox3.ValueMember = "Category";
     comboBox3.DisplayMember = "SubCategory";
     comboBox3.DataSource = dt1;
     comboBox3.Enabled = true;
     comboBox4.Enabled = false;
     //con.Close();
    }
}

3-й комбинированный список:

private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
{
    if (comboBox3.SelectedValue.ToString() != null)
    {
       string maincon = ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString;
       string query2 = "select * from Product where Category=@Category";
       SqlConnection con = new SqlConnection(maincon);
       SqlCommand com2 = new SqlCommand(query2, con);
       //con.Open();
       com2.Parameters.AddWithValue("@Category", comboBox3.SelectedValue.ToString());
       SqlDataAdapter adp2 = new SqlDataAdapter(com2);
       DataTable dt2 = new DataTable();
       adp2.Fill(dt2);
       comboBox4.ValueMember = "Category";
       comboBox4.DisplayMember = "Item";
       comboBox4.DataSource = dt2;
       comboBox3.Enabled = true;
       comboBox4.Enabled = true;
       //con.Close();
       textBox2.Text = Convert.ToString(comboBox3.SelectedIndex);
    }
}

1 Ответ

0 голосов
/ 28 марта 2019

Основано на комментариях @vikschool.Я разбил таблицы следующим образом:

CID         Category
----------- --------------------------------------------------
          1 Pen
          2 Pencil


SID         CID         SubCategory
----------- ----------- --------------------------------------------------
          1           1 BallPoint
          2           2 HB


ID          SID         CID         Item
----------- ----------- ----------- --------------------------------------------------
          1           1           1 Matadoor
          2           2           2 Natraz


Category       SubCategory                                        Item
-------------- -------------------------------------------------- -----------------------
Pen            BallPoint                                          Matadoor
Pencil         HB                                                 Natraz

Вот код, который работал для меня.

FormLoad:

private void Form1_Load(object sender, EventArgs e)
 {
        string query2 = "select * from Category";
        string maincon = ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString;
        SqlCommand com1 = new SqlCommand(query2, con);
        con.Open();
        SqlDataAdapter adp1 = new SqlDataAdapter(com1);
        DataTable dt1 = new DataTable();
        adp1.Fill(dt1);
        comboBox1.ValueMember = "CID";
        comboBox1.DisplayMember = "Category";
        comboBox1.DataSource = dt1;
        comboBox3.Enabled = false;
        comboBox2.Enabled = false;

 }

Первый ComboBox:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
 {
       if (comboBox1.SelectedValue != null)
       {

          string query2 = "select * from SubCategory where CID=@CID";
          SqlCommand com1 = new SqlCommand(query2, con);
          com1.Parameters.AddWithValue("@CID", comboBox1.SelectedValue);
          SqlDataAdapter adp1 = new SqlDataAdapter(com1);
          DataTable dt1 = new DataTable();
          adp1.Fill(dt1);
          comboBox2.ValueMember = "SID";
          comboBox2.DisplayMember = "SubCategory";
          comboBox2.DataSource = dt1;
          comboBox3.Enabled = false;
          comboBox2.Enabled = true;

       }
 }

Второй ComboBox:

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
 {
      if (comboBox2.SelectedValue != null)
      {
          string query2 = "select * from Item where SID=@ID";
          SqlCommand com1 = new SqlCommand(query2, con);
          com1.Parameters.AddWithValue("@SID", comboBox2.SelectedValue);
          SqlDataAdapter adp1 = new SqlDataAdapter(com1);
          DataTable dt1 = new DataTable();
          adp1.Fill(dt1);
          comboBox3.ValueMember = "ID";
          comboBox3.DisplayMember = "Item";
          comboBox3.DataSource = dt1;
          con.Close();
          comboBox3.Enabled = true;
          comboBox2.Enabled = true;
       }
 }

Третий ComboBox:

private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
 {
       textBox1.Text = Convert.ToString(comboBox3.SelectedValue);
 }

Примечание: Я пробовал это с базой данных Access.SQL должен работать с приведенным выше кодом.Пожалуйста, дайте мне знать, если кто-нибудь обнаружит какие-либо проблемы с использованием этого куска кода.Удачного кодирования.Спасибо @ vikschool.

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