ListDataProviderを使用して DataGrid のデータを管理する場合、項目の削除/追加時に DataGrid はスクロールしません。
以下は、スクロールせずにグリッド行を削除する最小限の例です (すべてエントリ ポイント クラスに含まれています)。
DataGrid 行のクラス:
private class Item{
public String text;
public int value;
public Item(String text, int value){
this.text = text;
this.value = value;
}
}
DataGrid を埋める:
ここでは、プライベート変数 を使用しdata
て、DataGrid のアイテムを保持します。メソッドを介してdataGrid
toをアタッチする必要があることに注意してください。data
addDataDisplay
ListDataProvider data;
public void onModuleLoad() {
// build grid:
DataGrid dataGrid = new DataGrid();
BuildColumns(dataGrid);
dataGrid.setWidth("300px");
dataGrid.setHeight("300px");
// add items:
data = new ListDataProvider();
for(int i = 1; i < 25; i++){
data.getList().add(new Item("Item " + i, i));
}
data.addDataDisplay(dataGrid);
// display:
RootPanel.get().add(dataGrid);
}
DataGrid の構築:
このプライベート メソッドは、DataGrid の列を構築するために使用されます。delCol
ボタン列のクリック イベントをリッスンするために使用されるの FieldUpdater 内で、からそれぞれの項目を削除し、DataGrid 表示を更新するためdata
に呼び出します。data.refresh()
private void BuildColumns(DataGrid dataGrid){
Column textCol = new Column(new SafeHtmlCell()) {
@Override
public SafeHtml getValue(Item object) {
SafeHtmlBuilder sb = new SafeHtmlBuilder();
sb.appendEscaped(object.text);
return sb.toSafeHtml();
}
};
dataGrid.addColumn(textCol);
dataGrid.setColumnWidth(textCol, 75, Unit.PCT);
Column deleteCol = new Column(new ButtonCell()) {
@Override
public String getValue(Item object) {
return "Delete " + object.value;
}
};
deleteCol.setFieldUpdater(new FieldUpdater() {
@Override
public void update(int index, Item object, String value) {
data.getList().remove(index);
data.refresh();
}
});
dataGrid.addColumn(deleteCol);
}
このコードを新しい GWT プロジェクトに入れ、テストしました。行を削除するとき、DataGrid はスクロールしません。