2017-02-09 5 views
1

У меня есть приложение winform в C#, которое получает значения из базы данных SQL-сервера. Я могу получить значения, которые хочу получить в combobox, но в зависимости от выбранного выбора я хочу показать соответствующие строки sql в checkedcombobox, чтобы пользователь мог выбрать нужный. код я имею: (заполнить выпадающий)C# fill checkelistbox from combobox SQL

SqlDataAdapter SDA = new SqlDataAdapter("select distinct desempenho from vidros", con); 
    DataTable DTT = new DataTable(); 
    SDA.Fill(DTT); 
    desempenho.Items.Clear(); 
    foreach (DataRow ROW in DTT.Rows) 
    { 
     desempenho.Items.Add(ROW["desempenho"].ToString()); 
    } 

И: (для отображения выбранной строки в checkedcombobox) ведьма не работает.

private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con); 
      DataTable DTT = new DataTable(); 
      sda.Fill(DTT); 
      checkedListBox1.Items.Clear(); 
      foreach (DataRow AB in DTT.Rows) 
      { 
       checkedListBox1.Items.Add(AB["desc"].ToString()); 
      } 
     } 

Это лучший способ предоставить пользователю несколько предметов на выбор? Кто-нибудь знает, что может быть проблема с кодом?

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

+0

И что не работает? Можете ли вы объяснить, какая у вас проблема с этим кодом? – Steve

+0

@Steve извините за плохой информация. проблема заключается в том, что когда я выбираю элемент из поля со списком, ничего не появляется в контрольном списке. – septaug

+0

У вас нет исключения? Это имя поля DESC является зарезервированным ключевым словом и используется как должно вызвать исключение. – Steve

ответ

1

Выглядит как код для связывания ListBox ставятся в неправильном месте. Если вы хотите связать listbox на основе выбранного элемента поля combobox, вам нужно написать эту логику в событии SelectedIndexChanged в поле со списком.

Если вы переместите свой код в обработчик события SelectedIndexChanged, как показано ниже.

private void desempenho_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con); 
     DataTable DTT = new DataTable(); 
     sda.Fill(DTT); 
     checkedListBox1.Items.Clear(); 
     foreach (DataRow AB in DTT.Rows) 
     { 
      checkedListBox1.Items.Add(AB["desc"].ToString()); 
     } 
    } 

Присоединить этот обработчик к событию SelectedIndexChanged обработчика и он должен решить эту проблему.

1

Рано или поздно эта ошибка возникает у всех.

DESC - зарезервированное ключевое слово практически в любой существующей системе баз данных. Он используется в предложении ORDER BY, чтобы результаты упорядочивались по убыванию.

Так что, если у вас действительно есть поле с именем таким образом (лучше изменения, которое называют как можно скорее), вы должны заключить его в уходящих символах (Sql Server использует квадратный brakets)

SqlDataAdapter sda = new SqlDataAdapter(@"select [desc] 
     from vidros where desempenho ='" + desempenho.Text + "'", con); 

Said что я также рекомендую использовать параметризованный запрос. В вашем случае вы должны быть относительно безопасными, но это лучше, чтобы избежать совершенно никакой возможности инъекции SQL

SqlDataAdapter sda = new SqlDataAdapter(@"select [desc] 
     from vidros where desempenho = @emp", con); 
sda.SelectCommand.Parameters.Add("@emp", SqlDbType.NVarChar).Value = desempenho.Text; 
..... 
+0

привет спасибо за помощь, к сожалению, checklistbox по-прежнему не показывает никаких остановок. – septaug