2015-01-22 4 views
1

У меня есть два сборника, которые должны содержать две разные информации.Как совместить два элемента comboboxes вместе

1.cb1: выберите table_name из information_schema.tables (это отображение нескольких таблиц)
2.cb2: следует заполнить его именем столбца.

Пример: У меня три таблицы в CB1 с теми же атрибутами, но имеют разные значения в столбце EmpName (tblLondon, tblBerlin, tblRom, ...)

Теперь я хочу дисплей во втором comboboxe столбца EmpName динамически, когда я выбираю таблицу в первом поле со списком.

cb1[tblLondon]       cb2[John,Mavis,Chris,Mike..] 

ИЛИ

cb1[tblBerlin]       cb2[Günther,Peter, Sophie,Sunny, ..] 

Может у плз помочь мне

string C = ConfigurationManager.ConnectionStrings[""].ConnectionString; 
     SqlConnection con = new SqlConnection(C); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = con; 
     cmd.CommandText = ("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME ASC"); 
     try 
     { 
      // Open connection, Save the results in the DT and execute the spProc & fill it in the DT 
      con.Open(); 
      SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
      dt = new DataTable(); 
      adapter.Fill(dt); 
      cbTbl.DisplayMember = "TABLE_NAME"; 
      cbTbl.ValueMember = "TABLE_NAME"; 
      //Fill combobox with data in DT 
      cbTbl.DataSource = dt; 
      // Empty bzw. clear the combobox 
      cbTbl.SelectedIndex = -1; 

Этот код работает и заселение мой CB1 (выпадающий)

И теперь я не очень знать, как продвигаться с помощью cb2

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
     { 


     } 
+0

Вы, вероятно, хотите просмотреть событие [ComboBox.SelectedIndexChanged] (https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectedindexchanged.aspx). – Anthony

+0

Предполагаю, что вы используете информационные_схемы.tables, потому что вы не знаете все таблицы во время разработки? – Crowcoder

+0

Я использую это, потому что я хочу иметь возможность динамически изменять имя таблицы в любое время – mikybrain

ответ

0

Если вы правильно поняли, и если у вас есть эти данные на SQL-сервере или другой базе данных, вы должны использовать событие SelectedIndexChange и загрузить его для этого идентификатора (используйте элемент отображения и значение для идентификатора соответствия).

взглянуть на this .it может помочь вам

Edit:
вы можете сделать это с помощью ниже код: (если вы не используете базу данных)
вы должны использовать этот код в cb1.SelectedIndexChange (или значение)

 var cb2items = new Dictionary<int, string> {{1, "Name"}, {1, "anotherName"},{2,"Name"},{2, "anotherName"}}; // use the number for parent Id in cb1 
     foreach (var item in cb2items) 
     { 
      if (item.Key == int.Parse(comboBox1.SelectedValue.ToString())) 
      { 
       comboBox2.Items.Add(item); 
      } 
     } 

Изменить 2:

использовать этот код в cb1.SelectedValueChange:

string C = ConfigurationManager.ConnectionStrings[""].ConnectionString; 
    SqlConnection con = new SqlConnection(C); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = con; 
    cmd.CommandText = ("SELECT ... WHERE TableName = cb1.SelectedValue"); 
     spProc & fill it in the DT 
     con.Open(); 
     SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
     dt = new DataTable(); 
     adapter.Fill(dt); 
     cbTbl.DisplayMember = "TABLE_NAME"; 
     cbTbl.ValueMember = "TABLE_NAME"; 
     cbTb2.DataSource = dt; 

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

Edit 3:

поместить этот код в cbTb2.SelectedValueChange событие:

 try 
     { 
      int a = int.Parse(cbTB2.SelectedValue.ToString()); 
     } 
     catch { } 
+0

Thnx, но я использую sql-сервер для заполнения cb1. Помогите? – mikybrain

+0

Я меняю код, но поскольку я не знаю ваших полей базы данных, я не могу выполнить запрос. –

+0

Thannx very much Я собираюсь попробовать свою удачу :) – mikybrain

0

Вы могли бы хотеть, чтобы увидеть события COMBOBOX, в "SelectedIndexChanged" или "SelectedValueChanged" должен сделать это

+0

Привет Я новичок в winforms C#. где shd я применяю выбранный индекс, который будет изменен так, чтобы cb2 был заполнен. Был бы новым, если бы я привел пример – mikybrain

+0

обновленный ответ с простейшим примером – mysticcode

+0

Thnx, но я до сих пор его не понимаю. Я использую sql-сервер для заполнения cb1 Итак, если выбрана таблица, определенное имя столбца должно заполнять cb2. Это возможно? – mikybrain

Смежные вопросы