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