Как отфильтровать DataGridView, чтобы сохранить только данный набор строк - PullRequest
0 голосов
/ 29 мая 2019

В C# У меня DataGridView заполнено через DataSource.С помощью некоторого пользовательского фильтра я определяю подмножество строк (точнее, просматривая строки и проверяя условия на столбцах), и мне нужно сохранять / показывать только эти строки в DatGridView.

Один вариант IПонимать - это циклически проходить по сетке и скрывать строки, которые находятся за пределами моего набора индексов.Это, однако, очень медленно для большого набора строк.У меня такой вопрос:

с учетом таблицы данных, которая связана с источником данных, и подмножеством его строк, существует ли эффективный способ сохранить только эти строки в таблице данных?

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Низкая скорость, вероятно, происходит только от обновлений GUI.Вы можете захотеть

Последний ускорит все операции отображения, включая прокрутку.


  • Если вы предпочитаете использовать настоящий фильтр, вам понадобится дополнительный столбец для хранениязначение фильтра и BindingSource.

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

Предполагая DataTable DT в качестве DataSource сначала добавьте столбец фильтра:

DT.Columns.Add("Filter", typeof(int));

Затем создайте BindingSource BS = new BindingSource();

Теперь свяжите исходный источник данных с источником привязки и используйте его в качестве нового источника данных:

BS.DataSource = DT;
yourDGV.DataSource  = BS;

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

BS.Filter = "Filter = 23";  // use your indicator logic!
BS.Filter = "";              // unset filter

Для фильтра вы можете использовать свойство DataColumn.Expression. синтаксис .

  • Если вы хотите увидеть столбец фильтра, вам необходимо добавить его также в столбцы DGV и установить соединение с источником данных.

Пример:

yourDGV.Columns.Add("Filter", "filter");
yourDGV.Columns["Filter"].DataPropertyName = "Filter";
0 голосов
/ 29 мая 2019

Как насчет того, чтобы заполнить Dgv из кода. Напишите оператор Select для заполнения DataTable, затем перейдите к установке Datatable как DS для вашего datagridview, и, наконец, если вам нужно отфильтровать, просто вызовите метод запроса, тогда он также вызовет другие.

...