Более быстрый способ сделать DataGridViewRow невидимым - PullRequest
3 голосов
/ 12 марта 2012

Я использую следующий код, чтобы установить группу 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 Ответ

1 голос
/ 13 марта 2012

Как сказал 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";

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

...