Сделайте предикат фильтрации данных предиката нечувствительным к регистру c # - PullRequest
0 голосов
/ 23 октября 2019

Я нашел этот замечательный пост о фильтрации в сетке данных ( Фильтр DataGrid в WPF ), и до сих пор он работал нормально. Но у меня есть небольшая проблема по этому поводу. Это чувствительно к регистру. Поскольку я не разбираюсь в "Предикате", мне нужна ваша помощь здесь.

У меня есть список (allProductRows), который содержит модель "ProductRows" [ID, artNr, ProductName]

ex: [2,123, "Software Alpha"]

myпоисковый запрос здесь:

private void searchBox_TextChanged(object sender, TextChangedEventArgs e)
{
    filterDataGrid(tb_searchBox.Text);
}


/// <summary>
/// Filter DataGrid to specific Term (atm Case Sensitive)
/// </summary>
/// <param name="searchTerm">SearchTerm String</param>
private void filterDataGrid(string searchTerm)
{
    var _itemSourceList = new CollectionViewSource() { Source = allProductRows };
    ICollectionView Itemlist = _itemSourceList.View;
    var myFilter = new Predicate<object>(item => ((ProductRow)item).ProductName.Contains(searchTerm));
    Itemlist.Filter = myFilter;
    dg_products.ItemsSource = Itemlist;
}

Благодаря @ Wiimax за код выше

(причина, по которой он находится в отдельном пустоте,из-за другого выполнения из другого места)

В этом состоянии все, что я ввожу в текстовое поле, корректно фильтруется, но оно чувствительно к регистру.

1 Ответ

0 голосов
/ 23 октября 2019

Я бы предположил (не могу проверить C #), что это так же просто, как добавить .ToLower() и к строке элемента коллекции, и к строке поиска. Вот это применяется к строке в вашем коде:

var myFilter = new Predicate<object>(item => ((ProductRow)item).ProductName.ToLower().Contains(searchTerm.ToLower()));
...