2013-04-04 53 views
1

我想在datagridview中以粗體顯示一些行。這適用於datagridview的綁定完成時。在datagridview中以粗體設置一些行時性能下降

Font bold = new System.Drawing.Font(this.GridView.Font, FontStyle.Bold); 

foreach (DataGridViewRow row in this.GridView.Rows) 
{ 
    FlattenedResult item = row.DataBoundItem as FlattenedResult; 
    if(item != null) 
    { 
     if(item.ParentID.Equals(item.ID)) 
     { 
      row.DefaultCellStyle.Font = bold; 
     } 
    } 
} 

問題是此操作需要超過9分鐘(僅對於1000行...)。有沒有更好的辦法 ?

謝謝!

+0

你應該看看虛擬模式。 – Aphelion 2013-04-04 07:36:52

+1

除了循環訪問datagridview之外,請嘗試使用datatable.select從datagridview數據源中選擇要設置爲粗體的行的索引,然後使用該索引設置粗體 – 2013-04-04 07:37:52

+0

首先篩選父行並僅傳播父行以設置樣式 – Sadaf 2013-04-04 08:02:56

回答

1

我曾經做過和你一樣的事情,10行花費了0.050秒才完成。

Cell Styles in the Windows Forms DataGridView Control,行/細胞Style屬性實例每次調用吸氣(你做什麼,要能夠設置Font屬性)時新DataGridViewCellStyle

創建一個新的DataGridViewCellStyle只有一次提高我的表演十次。使用下面的一段代碼,完成時間爲0.005秒。

private void dataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    DataGridViewCellStyle style = new DataGridViewCellStyle(this.DataGridView.RowsDefaultCellStyle); 
    style.Font = new System.Drawing.Font(this.DataGridView.Font, FontStyle.Bold); 

    foreach (DataGridViewRow row in this.DataGridView.Rows) 
    { 
     FlattenedResult item = row.DataBoundItem as FlattenedResult; 

     if (item != null) 
     { 
      if (item.ParentID.Equals(item.ID)) 
       row.DefaultCellStyle = style; 
     } 
    } 
} 

您還可以e.ListChangedType屬性篩選DataBindingComplete類型。

這可能不是更好的解決方案,但我希望它能幫助找到它。

你也可以看看共享行,但它似乎只適用於無用戶交互的DataGridView。