GWT/Widget/DataGrid

DataGrid

CellTableでは大きな行数のデータを表示しようとすると様々な不都合が生じる(CellTableを参照)。 DataGridでは、PageSizeを設定する必要はあるが(PageSizeを超えるデータは無視されてしまう。おそらくページングをしなければ表示されない)、勝手にスクロールバーがついてくれ、列ヘッダは固定してくれるので圧倒的に楽である。

参考

サンプル

DataGridの使えなさ

しかし、GXTでもこの事情は同じようだ。以下はGXTのサンプル

import java.util.*;

import com.extjs.gxt.ui.client.data.*;
import com.extjs.gxt.ui.client.store.*;
import com.extjs.gxt.ui.client.widget.grid.*;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.google.gwt.core.client.*;
import com.google.gwt.user.client.ui.*;

public class ImageViewer implements EntryPoint {
  
  class ModelDataAdapter implements  ModelData {
    public <X> X get(String property) { throw new RuntimeException(); }
    public Map<String, Object> getProperties() { throw new RuntimeException(); }
    public Collection<String> getPropertyNames() { throw new RuntimeException(); }
    public <X> X remove(String property) { throw new RuntimeException(); }
    public <X> X set(String property, X value) { throw new RuntimeException(); }
  }
 
  public void onModuleLoad() {
    RootLayoutPanel rootPanel = RootLayoutPanel.get();

    ColumnModel model = 
        new ColumnModel(Arrays.asList(new ColumnConfig[] { new ColumnConfig("title", 500) }));
    ListStore<ModelData> store = new ListStore<ModelData>();
    for (int i = 0; i < 1000; i++) {
      final int index = i;
      store.add(new ModelDataAdapter() {
        public String get(String name) {
          System.out.println("" + index);
          return name + index;
        }
      });
    }
    Grid<ModelData> grid = new Grid<ModelData>(store, model);

    rootPanel.add(grid);
    grid.setSize("640px", "480px");
  }
}

結局のところ、これはブラウザの情報の取得制限に関わる問題のようだ(あくまでも想像)。つまり、

last edited 2011-12-01 10:05:11 by ysugimura