5

CheckBoxCell 列を持つ cellTable があります。私がやろうとしているのは、セルテーブルの外に一連のボタンを用意して、ユーザーがさまざまな要素のセットを自動的にチェック/チェック解除できるようにすることです(たとえば、すべてをチェック/すべてをチェック解除しますが、より複雑なルールが必要です) )。

私が理解していないのは、要素にアクセスする方法(行/列の値を介してだと思います???)と値を取得/設定する方法です。

誰かがそれを解決する方法を理解するのを手伝ってくれますか?

4

2 に答える 2

15

チェックボックスを「選択」にバインドし、一連の項目をプログラムで簡単に選択することが必要であると仮定すると (微妙: 項目を選択すると、ボックスをチェックするのではなく、チェックボックスがチェックされます) MultiSelectionModel、.

http://gwt.google.com/samples/Showcase/Showcase.html#!CwCellTableにサンプル コードがあります。

final MultiSelectionModel<ContactInfo> selectionModel = new MultiSelectionModel<ContactInfo>(
    ContactDatabase.ContactInfo.KEY_PROVIDER);
cellTable.setSelectionModel(selectionModel,
    DefaultSelectionEventManager.<ContactInfo> createCheckboxManager());
…
Column<ContactInfo, Boolean> checkColumn = new Column<ContactInfo, Boolean>(
    new CheckboxCell(true, false)) {
  @Override
  public Boolean getValue(ContactInfo object) {
    // Get the value from the selection model.
    return selectionModel.isSelected(object);
  }
};
cellTable.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant("<br/>"));
cellTable.setColumnWidth(checkColumn, 40, Unit.PX);

次に、アイテムを選択する (そしてそのチェックボックスを自動的にチェックする) には、次のようにします。

selectionModel.setSelected(item, true);

同様に、選択したすべてのアイテムのセットを で取得できますselectionModel.getSelectedSet()

于 2011-05-30T15:09:56.190 に答える
3

cellTable をどのように設定したかはわかりませんが、dataProvider がリンクされていると思います。ListDataProvider または AsyncDataProvider のいずれか。プロバイダーのデータを変更して、行のステータスを変更したいと考えています。

以下は、cellTable とチェックボックスを持つ uiBinder があると仮定して、すべてを選択/選択解除する簡単な例です。

public class MyView extends Composite {

  private class MyTableRow {
    private boolean checked;

    public boolean isChecked() {
        return this.checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

  }

  interface MyViewUiBinder extends UiBinder<Widget, MyView> {
  }

  private static MyViewUiBinder uiBinder = GWT.create(MyViewUiBinder.class);
  private ListDataProvider<MyTableRow> provider = new ListDataProvider<MyTableRow>();
  @UiField(provided = true)
  CellTable<MyTableRow> table;

  public MyView() {
    this.table = new CellTable<MyTableRow>();
    Column<MyTableRow, Boolean> checkBoxColumn = new Column<MyTableRow, Boolean>(new CheckboxCell()) {

        @Override
        public Boolean getValue(MyTableRow object) {
            return object.isChecked();
        }

    };
    this.table.addColumn(checkBoxColumn);
    this.initWidget(uiBinder.createAndBindUi(this));
  }

  @UiHandler("selectAllBox")
  public void onSelectAllClicked(ClickEvent e) {
    for (MyTableRow row : this.provider.getList()) {
        row.setChecked(((CheckBox)e.getSource()).getValue());
    }
  }

}
于 2011-05-30T13:52:15.193 に答える