2017-07-17 56 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; 
      }