2012-03-12 6 views
3

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

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

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(); 

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

+2

Почему бы не фильтровать источник данных до привязки? – PraveenVenu

ответ

1

Как сказал PraVn, вы можете просто фильтровать перед использованием datagridview. Если вы используете 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"; 

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

+0

Я как упрямый и стараюсь не использовать несколько списков. Правильное решение было сделать точно так же, как PraVn, и вы сказали: фильтр в новую коллекцию. Спасибо вам обоим! – Kashif