2010-10-08 49 views
0

我有一个5000条目的datagridview。我想根据一些值对行进行着色。下面是我如何做到这一点:它冻结了几秒钟颜色datagridview行不冻结C#

foreach (DataGridViewRow row in rows) 
    { 
     var handlingStage = (ESourceHandlingStage)row.Cells["HandlingStage"].Value; 
     switch (handlingStage) 
     { 
      case ESourceHandlingStage.NotStarted: 
       row.DefaultCellStyle.BackColor = UnhandledColor; 
       row.DefaultCellStyle.SelectionBackColor = Color.Blue; 
       break; 
      case ESourceHandlingStage.Given: 
       row.DefaultCellStyle.BackColor = GivenColor; 
       row.DefaultCellStyle.SelectionBackColor = Color.Blue; 
       break; 
      case ESourceHandlingStage.Taken: 
       row.DefaultCellStyle.BackColor = TakenColor; 
       row.DefaultCellStyle.SelectionBackColor = Color.Blue; 
       break; 
      case ESourceHandlingStage.Handled: 
       row.DefaultCellStyle.BackColor = HandledColor; 
       row.DefaultCellStyle.SelectionBackColor = Color.Blue; 
       break; 
      case ESourceHandlingStage.Loaded: 
       row.DefaultCellStyle.BackColor = LoadedColor; 
       row.DefaultCellStyle.SelectionBackColor = Color.Blue; 
       break; 
      default: 
       break; 
     } 
    } 

但是,当窗体加载。我可以避免它吗?
谢谢你的帮助!

回答

1

你正在循环所有的行,所以这需要一些时间,你有更多的时间会花更多的时间。

您可以将此处理置于后台线程上,但您需要封送代码以便在UI线程上发生实际更改。这需要花费相同的时间,但在处理UI时不会锁定它。

另一种方法是在添加每行时更改颜色。但是,这取决于您的数据一次添加一行。

1

尝试着色数据绑定上的行。我认为你需要附加到ItemDataBound事件或类似的东西。检查数据并相应地对行进行着色。这样,您不必在创建所有行后循环,而是在创建它们时执行您的工作。