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

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

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

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

【问题讨论】:

    标签: gwt checkbox gwt-2.2-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 ...我会尝试按照您的示例,然后提供反馈
    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多