Как сделать фильтрацию в datagridview

Обновлено: 07.07.2024

Для поиска по текстовым полям на стороне SQL можно использовать оператор LIKE.

Например, для T-SQL:

Выберет все колонки field, в которых встречается буква "а".

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

DataGridView выводит данные.
Фильтровать нужно в источнике. Реализация будет зависеть от того, откуда берутся данные.

Например, если источник DataTable, то можно использовать RowFilter свойства DefaultView:

Я загружаю списки объектов в datagrid с помощью этого:

model становятся данными из базы данных. Он имеет Id(int) , Name(string) и Text(string)

В моем datagrid я показываю только имя model . Как я могу отфильтровать datagrid сейчас, когда я ввожу что-то в текстовое поле?

ОТВЕТЫ

Ответ 1

существует несколько способов фильтрации Collection

предположим, что это ваш класс предметов

и ваша коллекция выглядит как

Способ 1 (предикат):

Способ 2 (FilterEventHandler):

расширенная информация в пути 1

если вам нужно несколько условий или какой-либо сложный фильтр, вы можете добавить метод к вашему Predicat

Ответ 2

Это простая реализация использования свойства фильтра ICollectionView. Предположим, что ваш XAML содержит следующее:

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

Ответ 3

@WiiMaxx, не может комментировать, так как недостаточно rep. Я был бы немного осторожен в отношении прямых бросков. Они могут быть медленными для одной вещи, а для другой, если тот же фильтр был применен к сетке, содержащей различные данные сложного типа, у вас было бы InvalidCastException.

Это не сломает вам datagrid и не будет фильтровать результаты, если сбой выполняется. Меньшее влияние на ваших пользователей, если вы ошиблись в коде. Кроме того, фильтр будет быстрее из-за того, что оператор "как" не делает никакого явного принуждения типа, поскольку операция прямого литья будет.

Ответ 4

взгляните на DataBinding → в вашем случае не добавляйте элементы в свою сетку, а установите itemssource

и если вы хотите, чтобы какая-то фильтрация, сортировка, группировка смотрели на CollectionView

Ответ 5

Вы можете использовать фильтр dataview, чтобы отфильтровать строки datagrid.

Если "datatable" - это источник данных, предоставленный вашему datagrid и использующий построитель строк, вы создаете запрос фильтра, где "Filter String" - это текст, который вы хотите найти в вашем datagrid, и установите его в dataview и, наконец, установите dataview как источник данных к вашему datagrid и обновите его.

Аннотация: Описывает объект для отображения табличной информации DataGridView и настройку его свойств и столбцов.

  1. Изучить объекты для отображения табличной информации DataGridView
  2. Рассмотреть настройка свойств столбцов в DataGridView

Объект для отображения табличной информации DataGridView

Объект DataGridView предназначен для отображения всей информации из таблиц, запросов или фильтров на форме в виде таблицы. Этот объект может быть создан как вручную (с последующим его подключением), так и перетаскиванием всего источника данных из окна "Data Sources". Однако наиболее часто его создают перетаскиванием всей таблицы, запроса или фильтра из окна "Data Sources" на форму.

При перетаскивании этого объекта на форму, как и в случае с другими объектами появляется панель навигации. Она выполняет функции: перемещение по записям, добавление, удаление и сохранение записей. После создания объекта DataGridView можно настраивать как свойства всего объекта, так и свойства отдельных столбцов. Начнём с настройки свойств всего объекта. Настройка данных свойств осуществляется в основном через меню действий. Возможны следующие настройки:

  • Choose Data Source - источник данных, отображаемый в таблице;
  • Enable Adding - добавлять записи;
  • Enable Deleting - разрешается пользователям удалять записи;
  • Enable Editing - разрешается пользователям изменять значения полей таблицы;
  • Enable Column Reordering - разрешается пользователям изменять порядок столбцов, просто перетаскивая их мышью.

Также в меню действий возможны следующее действия с таблицей:

  • Dock in parent container - вписать объект в форму;
  • Preview Data - появляется окно с предварительным просмотром таблицы;
  • Add Query - добавляет SQL - запрос, который выполняется на стороне клиента;
  • Add Column - добавление нового столбца в таблицу;
  • Edit Columns - настройка свойств отдельных столбцов таблицы.

Теперь перейдём к настройке отдельных столбцов таблицы.

Настройка свойств столбцов в DataGridView

Если в меню действий выбрать пункт "Edit Columns", то появляется окно, где можно добавлять, удалять и редактировать столбцы. Для этого в списке столбцов левой части окна выбираем столбец, а в правой - настраиваем его свойства. Наиболее часто настраиваются следующие свойства:

  1. Name - имя столбца;
  2. AutoSizeMode - подгонка ширины столбца по его содержимому;
  3. ColumnType - определяет внешний вид ячеек столбца (какой объект для отображения информации находится в ячейках столбца);
  4. DataPropertyName - имя, отображающего в столбце поля;
  5. Frozen - фиксация столбца (столбец не передвигается при прокручивании таблицы);
  6. HeaderText - текст заголовка столбца;
  7. Width - ширина поля;
  8. MaxInputLength - максимально вводимая длина текста;
  9. MinimumWidth - минимальная ширина столбца;
  10. ReadOnly - блокировка столбца для редактирования данных;
  11. Resizable - разрешает менять ширину столбца;
  12. SortMode - сортировка данных в таблице по этому столбцу;
  13. ToolTipText - всплывающая подсказка для столбца;
  14. Visible - делает столбец невидимым.

Замечание: Для добавления новых столбцов в окне "Edit Columns" необходимо нажать кнопку Add, а для удаления кнопку Remove.

Замечание: Если необходимо настроить внешний вид всех ячеек таблицы, то для этого необходимо выделить объект DataGridView и на панели свойств зайти в свойство DefaultCellStyle. Появится окно со свойствами всех ячеек таблицы.

Замечание: В объекте DataGridView имеется возможность сортировки данных. Для этого используется метод Sort, имеющий следующий синтаксис :

где DataGridView - это имя объекта , - это имя столбца (свойство Name ) по которому происходит сортировка записей в таблице, параметр определяет порядок сортировки и может принимать два значения:

Замечание: Доступ к отдельным ячейкам таблицы можно получить через подобъект Item. Обращение к нему осуществляется следующим образом:

Здесь DataGridView - это имя объекта , i - горизонтальная координата ячейки, а j - вертикальная, - это настраиваемое свойство ячейки.

Пример: В верхнюю левую ячейку таблицы записать слово "Привет" и сделать цвет текста в ячейке красным.

Здесь DataGridView - это имя объекта , свойство Value определяет содержимое ячейки таблицы, свойство Style.ForeColor определяет цвет текста в ячейке. Нумерация столбцов и строк в таблице начинается с нуля.

На этом мы заканчиваем рассмотрение табличных форм для работы с данными. Дополнительную информацию можно найти в "лабораторной работе №11" .

Я пытаюсь создать кнопку, которая принимает 2 пользовательских ввода, а затем фильтрует datagridview в зависимости от двух входов. Я использую winforms и Sql. Вот код, который я нашел и попытался реализовать, но он не заполняет datagridview отфильтрованными данными.


Если вы загружаете данные в форме load, вам не нужно запускать запрос для фильтрации сетки, вы можете просто использовать a DataView для фильтрации таблицы данных.

Вышеупомянутый подход будет лучше масштабироваться - это означает, что если Personal_Details содержит 100 000 записей, загрузка DataView займет много времени.

Если вы загружаете данные в форме load, вам не нужно запускать запрос для фильтрации сетки, вы можете просто использовать a DataView для фильтрации таблицы данных.

В приведенном ниже примере я предполагаю, что вы используете comboBox2 для выбора имени столбца, на основе которого вы хотите выполнить фильтрацию.

Читайте также: