Более быстрый способ сделать DataGridViewRow невидимым

Я использую следующий код, чтобы установить кучу DataGridViewRow элементы должны быть невидимыми. Правило, которое я использую, заключается в проверке соответствующего источника данных для логического флага. Если флаг имеет значение true, строка будет отображаться. Если нет, он будет невидимым.

Следующий код работает; тем не менее, он делает это, занимая совсем немного времени:

CurrencyManager currencyManager = (CurrencyManager)BindingContext[dataGridView.DataSource];

currencyManager.SuspendBinding();

foreach (DataGridViewRow row in dataGridView.Rows)
{
    if (!objectList.list[row.Index].Selected)
    {
        row.Visible = false;
    }
}
currencyManager.ResumeBinding();

У кого-нибудь есть лучшее решение? Чем длиннее список объектов, которые мне нужно пройти, тем дольше этот процесс, естественно. Я не могу установить диапазон ячеек, потому что логические значения не могут быть смежными.

1 ответ

Решение

Как сказал PraVn, вы можете просто отфильтровать данные перед использованием сетки данных. Если вы используете DataSet, DataTable или DataView, просто сделайте следующее:

DataSet ds = new DataSet();
ds.Tables[0].DefaultView.RowFilter = "YourBooleanColumn = 1";

DataView dv = new DataView();
dv.RowFilter = "YourBooleanColumn = 1";

DataTable dt = new DataTable();
dt.RowFilter.DefaultView.RowFilter = "YourBooleanColumn = 1";

В качестве альтернативы, вы можете фильтровать в конце базы данных (если она есть?). Дайте нам знать, что ваш источник данных, и я буду обновлять по мере необходимости. Это лучшее, что я могу сделать!

Другие вопросы по тегам