【问题标题】:Fastest way of changing rows color of DataGridView改变DataGridView行颜色的最快方法
【发布时间】:2014-02-15 08:28:58
【问题描述】:

我有一个DataGridView 控件,有两种方法:Filter() 和 ResetFilter()

过滤网格时,我将DataGridView 行的背景颜色更改为蓝色。
在 ResetFilter 上,我将每一行的 BackColor 重置为白色。

以下是我目前所达到的代码:


dgvMain.Rows.Cast<DataGridViewRow>().ToList
     .ForEach(f => f.DefaultCellStyle.BackColor = Color.White);

这大约需要 40 到 50 毫秒,并且

foreach (DataGridViewRow row in dgvMain.Rows)
{ row.DefaultCellStyle.BackColor = Color.White; }

这大约需要 30 到 40 毫秒,速度提高了 25%。


是否有更快的解决方案来更改所有行的背景色? dgvMain.RowsDefaultCellStyle.BackColor = Color.White 之类的东西不会迭代每一行?

【问题讨论】:

  • 我非常怀疑dgvMain.Rows.Cast&lt;DataGridViewRow&gt;().ToList .ForEach(f =&gt; f.DefaultCellStyle.BackColor = Color.White); 比传统的 foreach 快 25%!
  • 测量这些时的行数是多少?
  • @SriramSakthivel 哎呀,我打错了代码的顺序 :) 抱歉,当然传统的 foreach 比投射到列表要快。更正了代码。谢谢。
  • @SriramSakthivel 我有大约 57,500 行
  • 我怀疑在更改颜色时调用了 Paint。如果是这种情况,请查看 this 是否对您有帮助。暂时防止重绘控制。

标签: c# winforms datagridview


【解决方案1】:

显然,迭代所有行并设置BackColor 是一个非常糟糕的主意。使用DataGridViewDefaultCellStyle属性

【讨论】:

  • 我尝试在DataGridView 上设置DefaultCellStyle,但它不会改变行的颜色。有没有我应该调用的方法,例如 Refresh() 或 Repaint() 或类似的方法?
  • 我用一个简单的应用程序对其进行了测试,它工作正常,你有任何 CellFormating/CellPainting 吗?另外,如果我在 57500 行中使用 3 个文本列进行行迭代,我会花费大量时间(Core i5)。
  • 另外注意,如果您已经设置了一些行的BackColor,那么DataGridViewDefaultCellStyle 属性可能不适用于这些行。
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多