GWT CellTable以编程方式选择CheckBoxCell



我有一个带有CheckBoxCell列的cellTable。我想做的是在单元格表外有一组按钮,让用户可以自动选中/取消选中不同的元素集(例如,选中所有元素/取消选中所有元素,但我希望有更复杂的规则)。

我不明白的是如何访问元素(我想是通过行/列值??)并获取/设置值。

有人能帮我想办法解决吗?

假设您想要的是将复选框绑定到"选择",并通过编程轻松地选择一堆项目(微妙之处:选择项目,这将导致复选框被选中,而不是复选框),那么您将使用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);

并且可以类似地使用CCD_ 2获得所有所选项目的集合。

我不知道你是如何设置cellTable的,但我想你有一个链接到它的dataProvider。要么是ListDataProvider,要么是AsyncDataProvideer。您希望修改提供程序中的数据以更改行的状态。

下面是一个选择/取消选择全部的简单示例,假设您有一个带有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());
    }
  }
}

相关内容

  • 没有找到相关文章

最新更新