GWT CellTable 以编程方式选择 CheckBoxCell

Posted

技术标签:

【中文标题】GWT CellTable 以编程方式选择 CheckBoxCell【英文标题】:GWT CellTable programmatically select CheckBoxCell 【发布时间】:2011-05-30 09:47:22 【问题描述】:

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

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

谁能帮我弄清楚如何解决它?

【问题讨论】:

【参考方案1】:

假设您想要将复选框绑定到“选择”并以编程方式轻松选择一堆项目(微妙:选择项目,这将导致复选框被选中,而不是选中框),您将使用 @ 987654322@.

你会在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() 获取所有选定项目的集合。

【讨论】:

感谢您的回答,但这不是我的情况:我不想通过表格选择来选中/取消选中,而是使用表格外的一组按钮。绑定在列的元素和表格外的按钮之间 按钮的点击处理程序只需必须“选择”选择模型中的适当项目(clear() + setSelected(item, true)),然后复选框状态将为相应地更新(自动)。 @ThomasBroyer 如何使用AsyncDataProvider 选择多个页面中的所有项目?【参考方案2】:

我不知道您是如何设置 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 ...我会尝试按照您的示例,然后提供反馈

以上是关于GWT CellTable 以编程方式选择 CheckBoxCell的主要内容,如果未能解决你的问题,请参考以下文章

GWT DataGrid/CellTable:选择多个页面

具有复选框选择和行单击事件的 GWT CellTable

GWT 2.5.1 CellTable 和 SimplePager 问题

GWT RequestFactory + CellTable

CellTable 的 GWT RPC 匹配数据

在 GWT 2.2 CellTable 中设置列​​的宽度而不裁剪 TextInputCell?