2012-03-12 69 views
3

我使用下面的代碼來設置一堆DataGridViewRow元素是不可見的。我正在使用的規則是檢查關聯的數據源的布爾標誌。如果該標誌爲真,則會顯示該行。如果不是,它將是不可見的。更快的方法來使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 2012-03-12 07:52:56

回答

1

正如PraVn所說的,您可以在使用datagridview之前簡單地進行過濾。如果您在使用DataSet,DataTable中,或數據視圖只是做了這一點:

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 2012-03-13 10:38:16