Низкая скорость, вероятно, происходит только от обновлений 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";