我正在寻找DataGridView的有效替代品,最好是免费的。它必须能够按字母顺序和数字顺序排序值,并能够相对无缝地处理数百行13列 - 我只需要添加一次行,但大部分数据(9行左右)将需要大约每半秒更新一次。 我已经尝试过使用datagridview,但不幸的是,它对我的需求还不够快 - 添加,实现的排序很糟糕;例如,数字排序:100,1009,102,102,106,1061,107,108,1115。 关于有效替代方案的任何建议? 谢谢!
答案 0 :(得分:0)
设置DataGridView的DoubleBuffered
将提高性能
要了解有关此主题的更多信息,请参阅该维基百科链接中的“计算机图形中的双缓冲”部分:Multiple buffering。
来自维基百科:
程序很难绘制显示器,因此像素不能 改变不止一次。例如,在更新文本页面时,它 更容易清除整个页面然后绘制字母比 以某种方式擦除所有不在旧的和新的像素 字母
您在评论中提到的link中的明确答案将完成此任务
但它使用Reflection
,如果没有它可以实现该结果,最好避免使用Reflection
。
更好的解决方案是创建自己的自定义datagridview,设置DoubleBuffered并在GUI中实现自定义控件。
例如:
class MyCustomDataGridView: System.Windows.Forms.DataGridView
{
public MyCustomDataGridView(): base()
{
base.DoubleBuffered = true;
}
}
答案 1 :(得分: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;
}