Более быстрый способ сделать 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";
В качестве альтернативы, вы можете фильтровать в конце базы данных (если она есть?). Дайте нам знать, что ваш источник данных, и я буду обновлять по мере необходимости. Это лучшее, что я могу сделать!