2011-12-16 10 views
1

現在、値のリストを行として持つエンティティを取得できるDataGridを作成しようとしています。リスト内の各値は、DataGridの独自の列にあります。エンティティの値のリストは異なるサイズを持つ可能性があるため、DataGridには可変数の列があります。私は、DataGridを作成し、各列をDataGridに追加するプロセスをループすると、列を追加するのにかかる時間が直線的に増加しないことに気付きました。ここですばやく多くの列をGWT DataGridに追加する方法

は、私はこれが約48秒、1秒を与えるか、または取る、私はそれを実行したすべての時間を要した列に

DataGrid<String> table = new DataGrid<String>(); 
table.setPageSize(25); 
int NUM_COLUMNS = 40; 

for (int i = 0; i < NUM_COLUMNS; i++) { 
    GWT.log("Adding column "+i); 
    TextColumn<String> nameColumn = new TextColumn<String>() { 
     public String getValue(String object) { 
     return object; 
     } 
    }; 

    table.addColumn(nameColumn, "Column " + i); 
    table.setColumnWidth(nameColumn, 100, Unit.PX); 
} 

ArrayList<String> data = new ArrayList<String>(); 
for (int i = 0; i < 10; i++) { 
    data.add("row "+i); 
} 

table.setRowCount(data.size(), true); 
table.setRowData(0, data); 
table.setWidth("100"); 

を追加する速さをテストするために使用したコードです。 10列未満の読み込みはかなり速かったようですが、列数が増えるにつれて、読み込みに要した時間が急激に増加しました。

データグリッドに列を追加する方法はありますか?前もって感謝します。

答えて

1

あなた自身に聞きたいことがあるかもしれない1つの質問は、それを行うより良い方法がある場合です。 40列(IMO)のテーブルは効率が悪いようです。一般に、DataGridに〜15列以上をロードするとパフォーマンスが大幅に低下し、FlexTableはあまり良くありません。

私はDataGridとかなり仕事をしていますが、私の場合、通常は数千の列しか持たない10個以下の列しか持っていません。 (データはもちろんページングされ、一気に詰まることはありません。)

私が気付いたことは、プレイングレンダリングです。これらの列をすべて追加する前にDOMにテーブルを追加していますか、それとも最初に追加していますか? DOMが更新されるのを待つのに多くの時間を費やすことができます。すべてをレンダリングした後にページに追加する場合は、複数の列を同時に追加するための組み込み関数がないため、おそらく最高の速度が得られるでしょう。

+0

これは私が恐れていたものです。列は必要であり、ほとんどの時間は15未満であるが、数は数十を有する。上記のようにDataGridの行データを最後に設定するので、列を扱う創造的な方法を見つけようとする必要があります。とにかくありがとうございます。うまくいけば、他の誰かがアイデアを持っているかもしれませ – user1076377

関連する問題