我有一个包含5000个条目的datagridview。我想根据一些值为行着色。我是这样做的:
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;
}
}
但是当表单加载时,它会冻结几秒钟。我可以避免吗? 谢谢你的帮助!
答案 0 :(得分:1)
你正在循环所有行,所以这需要一些时间,你拥有的行越多,所需的时间就越多。
您可以将此处理放在后台线程上,但是您需要编组代码,以便在UI线程上进行实际更改。这将花费相同的时间,但在处理时不会锁定UI。
另一种方法是在添加每一行时更改颜色。但是,这取决于您的数据一次添加一行。
答案 1 :(得分:1)
尝试在数据绑定上为行着色。我认为你需要附加到ItemDataBound事件或类似的东西。检查数据并相应地为行着色。这样,您不必在创建它们之后遍历所有行,而是在创建它们时完成工作。