.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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д