C datagridview фильтрация строк как в excel
Перейти к содержимому

C datagridview фильтрация строк как в excel

C# Winforms DataGridView с сортировкой / фильтрацией, как MS Excel

Привет мне нужно быстрое решение для фильтрации / сортировки с помощью элемента управления Winforms DataGridView, как в Excel.

Я просмотрел существующие посты в этой области, но ни одна из них не отвечает моим потребностям.

Я заполняю свой DataGridView вручную — без привязки данных

5 ответов

Столбцы DataGridView уже поддерживают сортировку.

Я бы заполнил DataTable вашими данными, а затем связал DataGridView с myDataTable.DefaultView.

Вы можете отфильтровать отображаемые строки, установив myDataTable.DefaultView.RowFilter.

Вы можете поместить текстовые поля и / или комбинированные списки над DataGridView и обновить myDataTable.DefaultView.RowFilter при изменении ввода / выбора.

Если вы ищете Excel-фильтр, похожий на функцию фильтрации, ознакомьтесь с этой статьей: http://msdn.microsoft.com/en-us/library/aa480727.aspx

Почему бы не использовать дешевый сторонний компонент? Даже если вы купите его, в конечном итоге это может реально сэкономить ваши деньги. Эта альтернатива DataGridView с автофильтром работает очень быстро, и основной режим работы — режим без привязок. Кроме того, он поддерживает автофильтр в стиле Excel.

Вы хотите что-то подобное?

DataGridView-AutoFilter — это готовый пакет Nuget, вам просто нужно загрузить его и следовать этой статье, это простой и расширенный подход.

Microsoft создала образец проекта для VB и C#, в котором они показывают, как создать то, что они называют плагином "автофильтра". Мне лично это не нравится, так как он позволяет фильтровать только так, чтобы продукт и клиент работали, открывайте счет, где цена> какое-то значение не реализовано

Сортировка осуществляется с помощью:

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

Как группировать, сортировать и фильтровать данные в элементе управления DataGrid

Часто бывает удобно просматривать данные в, DataGrid используя группировку, сортировку и фильтрацию данных. Чтобы сгруппировать, сортировать и фильтровать данные в DataGrid , привяжите их к CollectionView , который поддерживает эти функции. Затем можно работать с данными в, CollectionView не влияя на базовые исходные данные. Изменения в представлении коллекции отражаются в DataGrid пользовательском интерфейсе.

CollectionViewКласс предоставляет функции группирования и сортировки для источника данных, реализующего IEnumerable интерфейс. CollectionViewSourceКласс позволяет задавать свойства CollectionView из XAML.

В этом примере коллекция Task объектов привязана к CollectionViewSource . CollectionViewSourceИспользуется в качестве ItemsSource для DataGrid . Группирование, сортировка и фильтрация выполняются в CollectionViewSource и отображаются в DataGrid пользовательском интерфейсе.

Сгруппированные данные в элементе управления DataGridСгруппированные данные в элементе управления DataGrid

Использование CollectionViewSource в качестве ItemsSource

Для группирования, сортировки и фильтрации данных в DataGrid элементе управления необходимо привязать DataGrid к элементу CollectionView , который поддерживает эти функции. В этом примере DataGrid Привязка привязана к CollectionViewSource объекту, который предоставляет эти функции для List Task объектов.

Привязка элемента управления DataGrid к CollectionViewSource

Создайте коллекцию данных, которая реализует IEnumerable интерфейс.

При использовании List для создания коллекции следует создать новый класс, наследующий от класса, List а не экземпляр List . Это позволяет привязывать данные к коллекции в XAML.

Объекты в коллекции должны реализовывать INotifyPropertyChanged измененный интерфейс и интерфейс, чтобы IEditableObject DataGrid обеспечить правильную реакцию на изменения свойств и их изменение. Дополнительные сведения см. в разделе Реализация уведомления об изменении свойств.

В XAML создайте экземпляр класса Collection и задайте директиву x:Key.

В XAML создайте экземпляр CollectionViewSource класса, установите директиву x:Keyи задайте для экземпляра класса коллекции значение Source .

Создайте экземпляр DataGrid класса и присвойте ItemsSource свойству значение CollectionViewSource .

Для доступа к CollectionViewSource из кода используйте GetDefaultView метод, чтобы получить ссылку на CollectionViewSource .

Группирование элементов в элементе управления DataGrid

Чтобы указать, как группируются элементы в DataGrid , используйте PropertyGroupDescription тип для группирования элементов в представлении исходного кода.

Группирование элементов в элементе управления DataGrid с помощью XAML

Создайте объект PropertyGroupDescription , указывающий свойство для группировки. Свойство можно указать в XAML или в коде.

В XAML присвойте PropertyName свойству имя свойства, по которому будет группироваться.

В коде передайте имя свойства, по которому выполняется группирование, в конструктор.

Добавьте дополнительные экземпляры PropertyGroupDescription в коллекцию, GroupDescriptions чтобы добавить дополнительные уровни группирования.

Чтобы удалить группу, удалите ее PropertyGroupDescription из GroupDescriptions коллекции.

Чтобы удалить все группы, вызовите Clear метод GroupDescriptions коллекции.

Если элементы группируются в DataGrid , можно определить GroupStyle , определяющую внешний вид каждой группы. Вы примените, GroupStyle добавив его в GroupStyle коллекцию DataGrid. При наличии нескольких уровней группировки можно применить различные стили к каждому уровню группировки. Стили применяются в том порядке, в котором они определены. Например, если определить два стиля, первый будет применяться к группам строк верхнего уровня. Второй стиль будет применен ко всем группам строк на втором уровне и ниже. Объект DataContext класса, GroupStyle CollectionViewGroup представленный группой.

Изменение внешнего вида заголовков групп строк

Создайте объект GroupStyle , определяющий внешний вид группы строк.

Разместите GroupStyle внутри тегов.

Сортировка элементов в элементе управления DataGrid

Чтобы указать порядок сортировки элементов в DataGrid , используйте SortDescription тип для сортировки элементов в представлении исходного кода.

Сортировка элементов в элементе управления DataGrid

Создайте объект SortDescription , указывающий свойство, по которому выполняется сортировка. Свойство можно указать в XAML или в коде.

В XAML присвойте PropertyName свойству имя свойства, по которому будет выполняться сортировка.

В коде передайте имя свойства для сортировки и в ListSortDirection конструктор.

Добавьте дополнительные экземпляры SortDescription в SortDescriptions коллекцию для сортировки по дополнительным свойствам.

Фильтрация элементов в элементе управления DataGrid

Чтобы отфильтровать элементы в DataGrid с помощью CollectionViewSource , необходимо предоставить логику фильтрации в обработчике CollectionViewSource.Filter события.

Фильтрация элементов в элементе управления DataGrid

Добавьте обработчик для CollectionViewSource.Filter события.

В Filter обработчике событий определите логику фильтрации.

Фильтр будет применяться при каждом обновлении представления.

Кроме того, можно отфильтровать элементы в DataGrid , создав метод, предоставляющий логику фильтрации и установив CollectionView.Filter свойство для применения фильтра. Пример этого метода см. в разделе Фильтрация данных в представлении.

Пример

В следующем примере демонстрируется группирование, сортировка и фильтрация Task данных в CollectionViewSource и отображение сгруппированных, отсортированных и отфильтрованных Task данных в DataGrid . CollectionViewSourceИспользуется в качестве ItemsSource для DataGrid . Группирование, сортировка и фильтрация выполняются в CollectionViewSource и отображаются в DataGrid пользовательском интерфейсе.

Чтобы протестировать этот пример, необходимо изменить имя Дгграупсортфилтерексампле в соответствии с именем проекта. При использовании Visual Basic необходимо изменить имя класса на Window следующее.

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

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