我有一個帶有CheckBoxCell列的cellTable。我想要做的是在celltable外面有一組按鈕,讓用戶自動檢查/取消選中一組不同的元素(例如,檢查所有/全部取消選中,但我想要更復雜的規則)。GWT CellTable以編程方式選擇CheckBoxCell
我不明白的是如何訪問元素(我想通過行/列值???)並獲取/設置值。
任何人都可以幫我弄清楚如何解決它?
我有一個帶有CheckBoxCell列的cellTable。我想要做的是在celltable外面有一組按鈕,讓用戶自動檢查/取消選中一組不同的元素(例如,檢查所有/全部取消選中,但我想要更復雜的規則)。GWT CellTable以編程方式選擇CheckBoxCell
我不明白的是如何訪問元素(我想通過行/列值???)並獲取/設置值。
任何人都可以幫我弄清楚如何解決它?
假設你想要的是綁定的複選框,「選擇」,並輕鬆選擇一堆項目以編程方式(微妙:選擇項目,這將導致複選框被選中,而不是複選框),您將使用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()
獲得所有選定項目的集合。
我不知道你如何設置你的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());
}
}
}
謝謝。在我的情況下,我使用的是一個AsyncDataProvider ...我會嘗試按照你的例子,然後給予反饋 – Noya 2011-05-31 14:06:56
感謝您的答案,但它不是我的情況:我不想通過表選擇檢查/取消選中,而是使用表格外的一組按鈕。綁定在列元素和表外的按鈕之間 – Noya 2011-05-31 14:05:08
該按鈕的點擊處理程序只需要在選擇模型中選擇適當的項目(clear()'+ setSelected(item,true)') ,然後複選框狀態會相應地更新(自動)。 – 2011-05-31 14:29:00
@ThomasBroyer我將如何使用'AsyncDataProvider'來選擇多個頁面中的所有項目? – Nobody 2016-05-24 12:09:54