我有一个带CheckBoxCell列的cellTable。我要做的是在celltable外面有一组按钮,让用户自动检查/取消选中一组不同的元素(例如,检查所有/取消选中所有元素,但我想要更复杂的规则)。
我不明白的是如何访问元素(我想通过行/列值???)并获取/设置值。
任何人都可以帮我弄清楚如何解决它吗?
答案 0 :(得分:15)
假设你想要的是将复选框绑定到“选择”并轻松地以编程方式选择一堆项目(细微:选择项目,这将导致选中复选框,而不是复选框),你将使用{ {1}}。
您可以在http://gwt.google.com/samples/Showcase/Showcase.html#!CwCellTable中找到示例代码,即:
MultiSelectionModel
然后,要选择一个项目(并自动选中其复选框),您只需执行以下操作:
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);
同样获取所有选定项目的集合。
答案 1 :(得分: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());
}
}
}