【问题标题】:Efficient DataGridView Alternative高效的 DataGridView 替代方案
【发布时间】:2017-07-17 22:19:59
【问题描述】:

我正在寻找 DataGridView 的有效替代方案,最好是免费的。它必须能够按字母和数字对值进行排序,并且能够相对无缝地处理具有 13 列的数百行 - 我只需要添加一次行,但大部分数据(9 行左右)将需要大约每半秒更新一次。 我已经尝试过使用 datagridview,但不幸的是,它的速度不足以满足我的需求 - 补充一下,实现的排序很糟糕;比如数值排序:100,1009,102,102,106,1061,107,108,1115。 关于有效替代方案的任何建议? 谢谢!

【问题讨论】:

  • 您是否尝试将DoubleBuffered 设置为您的datagridview? (它可以极大地提高性能)。
  • @jonathana 哇!哇靠!太感谢了!我只是查了一下,并从以下代码中设置它:stackoverflow.com/questions/4255148/… 有什么不同!这是一个很大的帮助!现在,对于排序问题,您有什么特别的建议吗?
  • DGV 是数据绑定的吗?
  • @johnzidr,很高兴我能提供帮助,请查看我的完整答案,如果您觉得有用,请将其标记为答案。
  • 至于排序,为什么不在数据输入到datagridview之前先排序呢?这也会极大地影响速度,与某些数据结构字段(ListDatatable 等)中的操作相比,图形控件(即 datagridview)中的每次操作都非常慢。

标签: datagridview c#-3.0


【解决方案1】:

设置DataGridView的DoubleBuffered会提高性能。
要了解有关此主题的更多信息,请参阅该维基百科链接中的“计算机图形中的双缓冲”部分:Multiple buffering
来自维基百科:

程序很难绘制一个显示以使像素不显示 改变不止一次。例如,当更新一页文本时,它 清除整个页面然后绘制字母比 以某种方式擦除所有新旧都没有的像素 字母

您在评论中提到的link 中的标记答案将完成这项工作 但它使用Reflection,最好避免使用Reflection,如果没有它就可以实现该结果。

更好的解决方案是创建您自己的自定义数据网格视图,设置 DoubleBuffered 并在您的 GUI 中实现自定义控件。
例如:

class MyCustomDataGridView: System.Windows.Forms.DataGridView
{
    public MyCustomDataGridView(): base()
    {
        base.DoubleBuffered = true;
    }
}

【讨论】:

    【解决方案2】:

    @Jonathana 太棒了!太感谢了!效果很好! :) 我为您的答案 +1,但由于我的代表少于 15,它没有任何效果....无论如何,这就是解决方案! 另外,至于排序,我真的需要它,因为它是程序的一部分原因......需要能够根据用户想要的方式进行排序...... 将此添加到 SortCompare 方法中:

    if (e.Column.Index > 0 && e.Column.Index <COLUMN_COUNT) //first column is text, default sort is fine..
                {
                   e.SortResult = double.Parse(e.CellValue1.ToString()).CompareTo(double.Parse(e.CellValue2.ToString()));
                    e.Handled = true;
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      相关资源
      最近更新 更多