#c# #filter #bindingsource
#c# #Фильтр #bindingsource
Вопрос:
Я пытаюсь отфильтровать источник привязки на основе 2 списков со списком. У меня один из списков со списком фильтруется просто отлично. Второй ставит меня в тупик, поскольку он использует первый combobox, а затем второй на основе инструкции switch:
private void comboBox2_SelectedIndexChanged(object sender,
System.EventArgs e)
{
string sItem;
sItem = comboBox2.SelectedItem.ToString();
switch (sItem)
{
case "Banks":
propertyInformationBindingSource.Filter = ("ClientKey ='" comboBox1.SelectedValue "'" And "Search = -1");
break;
case "Exam":
propertyInformationBindingSource.Filter = ("ClientKey ='" comboBox1.SelectedValue "'") And ("Exam = -1");
break;
case "Search Finished":
propertyInformationBindingSource.Filter = ("ClientKey ='" comboBox1.SelectedValue "'") And ("Finished = -1;
break;
case "All":
propertyInformationBindingSource.Filter = "ClientKey ='" comboBox1.SelectedValue "'";
break;
}
}
У меня возникли проблемы со значением после И, в котором он утверждает, что оно неверно. Любая помощь была бы отличной.
Спасибо
Ответ №1:
Я думаю, что были некоторые проблемы с конкатенацией строк, и вы пропустили закрывающую скобку вокруг Finisher = -1
.
Попробуйте
switch (sItem)
{
case "Banks":
propertyInformationBindingSource.Filter = ("ClientKey ='" comboBox1.SelectedValue "' And Search = -1");
break;
case "Exam":
propertyInformationBindingSource.Filter = ("ClientKey ='" comboBox1.SelectedValue "' And Exam = -1");
break;
case "Search Finished":
propertyInformationBindingSource.Filter = ("ClientKey ='" comboBox1.SelectedValue "' And Finished = -1");
break;
case "All":
propertyInformationBindingSource.Filter = "ClientKey ='" comboBox1.SelectedValue "'";
break;
}
Обратите внимание, что если у вас происходит слишком много конкатенации строк, лучше всего использовать string.Format()
. Это улучшает читаемость и более эффективно, чем конкатенация. В качестве примера, ваш первый случай будет выглядеть следующим образом
propertyInformationBindingSource.Filter =
string.Format("ClientKey ='{0}' And Search = -1", comboBox1.SelectedValue);
Комментарии:
1. @Balar синтаксис кажется правильным, но я все еще не получаю желаемых результатов. При использовании combobox2 он всегда возвращается без записей.
2. @Korrowan если вы поставите точку останова в конце блока переключения, как
propertyInformationBindingSource.Filter
будет выглядеть?3. @Bala R для случая «Банки» это «ClientKey =’3′ И Search = -1»
4. Каков тип данных ClientKey? если это не строка, возможно, вы можете пропустить одинарные кавычки. В остальном выражение Filter выглядит для меня хорошо.
5. @Balar Я убрал одинарные кавычки. Кажется, это работает ТОЛЬКО для банков … все остальное игнорируется.