.NET 4.x Фильтр по нескольким полям в bindingsource - C#
Формулировка задачи:
Появилась необходимость фильтровать данные по нескольким полям в DataGridView.
По одному полю фильтрую без проблем, но когда дело доходит до 2х и более появляются проблемы:
при составлении строки фильтра, данные нужно связывать оператором AND, но некоторые поля могут оказаться пустыми и тогда получаем ошибку в тексте фильтра.
Например
Там может быть еще куча параметров и если один из них будет пустой, то появится сообщение об ошибке
или так
В моем случае есть 8 TextBox названных так : txbFilter[имя столбца в запросе]
Т.е. можно составить запрос через foreach
Все мои последующие попытки полный бред) Поэтому прошу помощи в реализации алгоритма фильтрации данных.
bindingSource.Filter = "color = 'red' AND name_car LIKE '%Niss%'";
bindingSource.Filter = "color = '' AND name_car LIKE '%Niss%'";
bindingSource.Filter = "color = 'red' AND ";
//Перебираем все контролы на expandable panel
foreach (Control ctr in expFilter.Controls)
{
//Выбираем те, у которых тип TextBox
if (ctr.GetType() == typeof (TextBox))
{
//Выбираем те, которые не пустые
if (ctr.Text != "")
{
//убираем строку txbFilter из названия TextBox и получаем только
//название поля, которое можно использовать в запросе
string nameField = ctr.Name.Remove(0, 9).ToLower();
string valueField = ctr.Text;
}
}
}Решение задачи: «.NET 4.x Фильтр по нескольким полям в bindingsource»
textual
Листинг программы
foreach (TextBox txb in expFilter.Controls.OfType<TextBox>.Where(tb => !string.IsNullOrEmpty(tb.Text)))
{
filter += stringFilter(txb.Name.Remove(0, 9), txb.Text);
IsFirst = false;
}