2017-07-17 15 views
0

私は、DataGridViewの代わりに、好ましくは無料です。アルファベットや数値の両方の値をソートすることができ、13の列を持つ数百の行を比較的シームレスに処理することができる必要があります - 行を一度追加するだけですが、データの大部分(9行程度)約0.5秒ごとに更新されます。 私はdatagridviewを試しましたが、残念ながら、私のニーズには十分に速くないだけです - 追加するには、実装された並べ替えはひどいです。例えば、数値ソーティング:100,1009,102,102,106,1061,107,108,1115。 効果的な代替案に関する提案はありますか? ありがとうございました! DataGridViewののDoubleBufferedを設定効率的なDataGridView代替

+1

あなたはあなたのdatagridviewに 'DoubleBuffered'を設定しようとしましたか? (パフォーマンスを大幅に向上させることができます)。 – jonathana

+0

@jonathana WOW!うんざり!どうもありがとうございます!私は、私はちょうどそれを見て、この内のコードからそれを設定します。 https://stackoverflow.com/questions/4255148/how-to-improve-painting-performance-of-datagridview 何の違いを!それは大きな助けです! ここで、ソートの問題について特別な提案がありますか? –

+0

DGVはデータにバインドされていますか? – TaW

答えて

0

は、パフォーマンスが向上します。このトピックについての詳細を学ぶため
そのWikipediaのリンクの「ダブルバッファリングコンピュータグラフィックスにおける」セクションを参照してください: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; 
      } 
関連する問題