我尝试根据DateTime.Now值剩余或传递的天数设置 DataGridViewRow 背景颜色。我写了一个简单的静态类,解析了dayleft /传递给颜色并返回这个颜色( RowColors.GetRowColor(DataGridViewRow row )。这个函数我用来遍历DataGridView中的所有行并改变返回我的背景颜色静态类。
一切正常,但有一个小问题 - 表现。我有大约1000行和着色持续约4秒。我知道,那不是那么多,但我希望它顺利而美好。
此外,当我添加一行时,我必须等待4秒事件引发火灾。我使用了并行循环,但似乎是绘制问题。我怎么能更快地做到这一点。谢谢。
private void allMatchesDataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
Color rowColor=Color.LightYellow;
Parallel.For(0, allMatchesDataGridView.RowCount, i =>
{
rowColor =
RowColors.GetRowColor(
Convert.ToDateTime(allMatchesDataGridView.Rows[i].Cells[CellNameTranslator.TranslateFromDatabaseName("DateTime")].Value));
allMatchesDataGridView.Rows[i].DefaultCellStyle.BackColor = rowColor;
});
}
答案 0 :(得分:1)
由于您正在更改一个UI元素并行将无济于事。
相反,您应该优化您的着色代码。
首先:当DGV处于实时模式时不要更新!
SuspendLayout();
之前调用ResumeLayout()
。 第二:
另外,您可能会考虑检查WPF,这对于任何GUI工作来说都会快得多。