2013-12-10 6 views
-1

Я разрабатываю университетское расписание, и у меня проблема с каскадом ComboBox, и я пока не нахожу ответ. Так что я хочу сделать, это отфильтровать КУРС на основе CATHEDRA и YEAR. Итак, CATHEDRA - comboBox1, YEAR - comboBox2, а COURSE - comboBox3. данные Cathedra используются из базы данных, но числа YEAR используются из comboBox2 EDIT ITEMS (я сам их выбрал LIKE: 1,2,3,4). Это запрос, я использую для этого получает меня к ошибке:Фильтр ComboBox (каскадный)

cmd.CommandText = ("SELECT idlcourse, name_of_course FROM tblCOURSE WHERE cathedra [email protected] AND [email protected]");  
cmd.Parameters.AddWithValue("@cathedra", comboBox1.Text); 
cmd.Parametes.AddWithValue("@year", comboBox2.Text); 

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

Тип атрибута PS: YEARS: Numeric(18). Если бы кто-то мог это сделать для меня, я был бы очень благодарен.

+0

Какую ошибку вы получаете точно? – gitsitgo

+0

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

+0

, вам действительно нужно быть более наглядным, чем просто «случайные ошибки». Пожалуйста, поместите эти ошибки в вопрос, спасибо. – gitsitgo

ответ

0

Хорошо, есть еще недостающая информация из вашего вопроса, но вот что я вижу.

  • YEAR является числовой тип, так что вы должны передать значение в качестве десятичного

  • В самом деле, у вас есть проблемы синтаксиса, на последней строке пишется Parametes вместо Parameters (возможно, это было просто случай с ошибкой в ​​вопросе)

  • Вы не проверяете значения, которые вы вносите в свой запрос. Если по какой-либо причине ComboBox2.Text не является строковым представлением числа, ваш запрос будет ошибочным. Если текстовые значения combobox равны String.Empty (по умолчанию для начальной загрузки, если вы не устанавливаете индекс), ваш запрос будет запущен, но не вернет правильные результаты.

Итак, вот что вы можете сделать:

decimal yearValue = 0;   //local var to store year 

//Check that user has selected something 
if(!String.IsNullOrWhiteSpace(comboBox1.Text) 
    && !String.IsNullOrWhiteSpace(comboBox2.Text) 
    && Decimal.TryParse(comboBox2.Text, out yearValue)) 
{ 
    cmd.CommandText = ("SELECT idlcourse, name_of_course FROM tblCOURSE WHERE [email protected] AND [email protected]");  
    cmd.Parameters.AddWithValue("@cathedra", comboBox1.Text); 
    cmd.Parameters.AddWithValue("@year", yearValue);  //Replaced with yearValue 
} 
else 
{ 
    //Handle else case (e.g Display msg to user) 
} 

В принципе, я сделать некоторые проверки значений выпадающего списка в if заявления. Я также использовал Decimal.TryParse(), который вернет true только в том случае, если он может преобразовать строку в десятичную. Похоже, что вы поместили числовые/целые значения в combobox в любом случае, но не мешает сделать некоторые дополнительные принудительные действия. Теперь, если он пройдет все эти проверки, он запустит запрос. Если это не пройдет, вам решать, как с этим справиться.

Как поместить эти результаты в comboBox3, поместите результаты запроса в объект List и привяжите его к его DataSource.

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