DataGridView在背景颜色变化方面性能降低

时间:2014-04-13 07:38:55

标签: c# winforms performance datagridview background-color

我尝试根据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;

            });
        }

1 个答案:

答案 0 :(得分:1)

由于您正在更改一个UI元素并行将无济于事。

相反,您应该优化您的着色代码。

首先:当DGV处于实时模式时不要更新!

  • 在更新之前和SuspendLayout();之前调用ResumeLayout()

第二:

  • 尝试仅更改需要更改的内容。这将需要一些簿记,但在性能方面会很便宜。

另外,您可能会考虑检查WPF,这对于任何GUI工作来说都会快得多。