Как сделать поиск в wpf
Перейти к содержимому

Как сделать поиск в wpf

Практическое руководство. Нахождение элемента по его имени

В этом примере описывается, как использовать метод FindName для поиска элемента по его значению Name.

Например, .

В этом примере метод для поиска определенного элемента по его имени написан в качестве обработчика событий кнопки. stackPanel — это Name искомого корневого элемента FrameworkElement. Затем пример метода визуально указывает найденный элемент путем приведения его в качестве TextBlock и изменения одного из видимых свойств пользовательского интерфейса TextBlock.

WPF — Реализация алгоритмов поиска

Поиск — один из самых важных алгоритмов программы, без которого на сегодняшний день не обходиться не одна информационная система, особенно работающая с большими объёмами данных.

В этой статье я бы хотел рассказать и показать как можно реализовать алгоритмы поиска и фильтрации в приложении написанном на WPF C#.

Что такое WPF?

Windows Presentation Foundation — один из компонентов ядра .NET Framework, который позволяет разработчикам создавать богатые, различные Windows приложения.

Создаём интерфейс для алгоритма поиска и фильтрации.

Самое первое что нужно сделать, это запустить Microsoft Visual Studio. А далее создать проект выбрав пункт «Приложение WPF» — Visual C#;

Создание нового проекта WPF - Visual C#

Следующим шагом настроим минимальные значения высоты и ширины окна, а также зададим значения по умолчанию.

Настройка максимального значения высоты и ширины программы, а также значения по умолчанию.

Реализовываем следующий интерфейс используя такие элементы как: Label, ComboBox, TextBox, ListView, Button. Как пользоваться ListView можно прочитать в этой статье.

Интерфейс программы для реализации алгоритма поиска.

Далее, присвоим атрибут DisplayMemberBinding для тегов GridViewColumn, дав наименования в соответствии с рисунком ниже.

Атрибут DisplayMemberBinding для тегов GridViewColumn

Для элемента ComboBox зададим атрибут x:Name=»genderFilter», а для TextBox атрибут x:Name=»nameFilter», для ListView – x:Name=»userList». Так же для элемента Button создадим обработчик события на активность Click.

Обработчик события на активность Click

XAML — разметка, полный код:

Пишем алгоритм поиска и фильтрации.

В первую очередь создадим класс объектов, хранящий в себе такие переменные как name, dataOfBirth, age, gender и реализуем функцию, отвечающую за заполнение этих данных:

Сразу же создадим массив этого класса, предполагая что у нас будет несколько значений.

Далее, необходимо создать функцию LoadUser, принимающую в качестве аргумента массив класса User и вызвать её после инициализации компонентов, отправив созданный массив класса user.

Думаю не сложно догадаться что эта функция будет выводить на экран все элементы массива, который мы передадим в эту функцию.

Вызовем эту функцию в после инициализации компонентов формы, чтобы сразу же отобразить имеющиеся данные. Стоп! А какие данные мы собрались отображать? Которых нет?

Добавим эти самые данные.

Перед выполнением функции пропишем добавление данных:

Запустив программу, можно увидеть что все данные благополучно вывелись на экран программы:

Результат выполнения программы реализации алгоритма поиска

Чтож, добавим в элемент ComboBox, два TextBlock’a, задав значения Мужской и Женский на XAML-разметке.

Два TextBlock в элементе ComboBox

Следующим шагом реализовываем функцию фильтрации по признаку пола: для этого необходимо создать новый массив класса User. А далее в зависимости от выбранного значения произвести поиск в массиве с определённым условием:

Функция работает следующим образом: если у нас выбран мужской пол, то из всего массива класса будут отобраны только те элементы, которые в качестве значения gender принимают «М». Если же пол женский — соответственно будут выбраны только записи с женским полом. Если же не выбрано ни чего, то будут отображены все записи.

После сортировки по половому фильтру необходимо добавить алгоритм кода, позволяющий производить точное совпадение, со строкой находящейся в TextBox:

Contains — этот метод позволяет производить совпадение в записи числа, с каким-то конкретным значением.

Если запустить программу то, можно заметить, что фильтр по половому признаку работает. Точно также как и поиск по совпадениям.

Search in WPF DataGrid (SfDataGrid)

WPF DataGrid control allows you to search the data displayed in the SfDataGrid. You can search the data by using SearchHelper.Search method.

WPF DataGrid with Search Panel

Filtering

You can enable filter based on search by setting SearchHelper.AllowFiltering property to true.

Enabling Filter based on Search in WPF DataGrid

You can search the data with the case-sensitivity by setting SearchHelper.AllowCaseSensitiveSearch property.

Changing Search Highlight Background

In WPF DataGrid (SfDatagrid), you can change the search text highlighting color by setting SearchHelper.SearchBrush property.

Changing Search Text Highlighting Color in WPF DataGrid

Changing foreground for search highlight

In WPF DataGrid (SfDatagrid), you can change the foreground color for search text by setting the SearchHelper.SearchForegroundBrush property.

Changing Fore Color of Search Text in WPF DataGrid

Navigating cells based on search text

You can navigate to the cells contains the SearchText using SearchHelper.FindNext and SearchHelper.FindPrevious methods.

You can highlight the currently navigated search text using SearchHelper.SearchHighlightBrush property.

Highlighting Navigated Search Text in WPF DataGrid

You can highlight the foreground color of current navigated search text by using the SearchHelper.SearchForegroundHighlightBrush property.

Highlighting Current Navigated Search Text Color in WPF DataGrid

Move CurrentCell when FindNext and FindPrevious

You can move the current cell along with FindNext and FindPrevious operation using MoveCurrentCell method in selection controller.

Clear Search

You can clear the search by calling the SearchHelper.ClearSearch method.

Search operation on Master-Details View

Master-details view allows you to search the data by using SearchHelper.Search method in the ViewDefinition.DataGrid.

WPF DataGrid displays Searched Data

Navigating cells based on search text in DetailsViewDataGrid

You can navigate to the cells contains the SearchText using SearchHelper.FindNext and SearchHelper.FindPrevious methods in ViewDefinition.DataGrid.

You can get the sample from here.

NOTE

It is not possible to Navigate with the two DataGrid at a time.

Search customization

WPF DataGrid (SfDataGrid) process the search operations in SearchHelper class. You can change the default search behaviors by overriding SearchHelper class and set to SfDataGrid.SearchHelper .

Search only selected columns

You can search only selected columns by overriding SearchCell method of SearchHelper . In the SearchCell method, based on MappingName you can skip the columns that you don’t want to search.

In the below code, except Quantity column other columns are gets excluded from search.

WPF DataGrid displays Search Text only in Selected Column

Select the record based on the SearchText

You can select the records which contains the search text by using GetSearchedRecord method.

Select Record based on SearchText in WPF DataGrid

Search with the GridComboBoxColumn

You can search the data in SfDataGrid with all the GridColumns which loads TextBlock as display element. To perform the search operation in the GridComboBoxColumn you need to customize the GridComboBoxColumn . As it loads the ContentControl in display mode.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *