2017-07-17 54 views
0

我正在寻找DataGridView的高效替代方案,最好是免费的。它必须能够按字母顺序和数字顺序排序值,并且能够相对无缝地处理数百行与13列 - 我只需要添加一行,但大部分数据(大约9行)需要每半秒更新一次。 我试过用datagridview,但不幸的是,它只是不够快,我的需求 - 添加,实施的排序是可怕的;例如,数字排序:100,1009,102,102,106,1061,107,108,1115。 任何有效的替代建议? 谢谢!高效的DataGridView备选方案

+1

您是否尝试将'DoubleBuffered'设置为您的datagridview? (它可以极大地提高性能)。 – jonathana

+0

@jonathana WOW!哇靠!非常感谢!我我只是看着它,并从代码在此设置: https://stackoverflow.com/questions/4255148/how-to-improve-painting-performance-of-datagridview 有什么区别!这是一个很大的帮助! 现在,有什么特别的,你可能会建议为排序问题? –

+0

DGV数据绑定? – TaW

回答

0

设置在DataGridView的DoubleBuffered将提高性能。
了解更多关于这个话题,请参阅“双缓冲在计算机图形学”在维基百科的链接部分:Multiple buffering
从维基百科:

是很困难的一个程序,绘制显示,这样的像素不 变化超过一次。例如,更新文本的页面时,它 更容易清除整个页面,然后绘制字母比 以某种方式擦除不同时新老 字母的所有像素

在明显的答案link您在您的评论中提到将做的工作 但它使用Reflection,它是最好避免使用Reflection时,就有可能实现这一结果没有它。

一个更好的解决方案是创建自己的自定义的datagridview,设置DoubleBuffered,实施您的GUI自定义控件。
例如:

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

@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; 
      }