.NET 4.x Фильтр по нескольким полям в bindingsource - C#

Узнай цену своей работы

Формулировка задачи:

Появилась необходимость фильтровать данные по нескольким полям в DataGridView. По одному полю фильтрую без проблем, но когда дело доходит до 2х и более появляются проблемы: при составлении строки фильтра, данные нужно связывать оператором AND, но некоторые поля могут оказаться пустыми и тогда получаем ошибку в тексте фильтра. Например
bindingSource.Filter = "color = 'red' AND name_car LIKE '%Niss%'";
Там может быть еще куча параметров и если один из них будет пустой, то появится сообщение об ошибке
bindingSource.Filter = "color = '' AND name_car LIKE '%Niss%'";
или так
bindingSource.Filter = "color = 'red' AND ";
В моем случае есть 8 TextBox названных так : txbFilter[имя столбца в запросе] Т.е. можно составить запрос через foreach
//Перебираем все контролы на 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.385 из 5
Похожие ответы