将Multi SelectionModel绑定到CellTable中的checkBox列,但是为什么列中的checkBoxes没有自动选择到SelectionModel?

时间:2013-12-21 13:08:02

标签: gwt gwtp

这是我的问题。 我有3列的简单表(Id,no,text)Id,没有组合为每一行创建一个唯一的键。

Id - no - text
12 - 1 - my text1
12 - 2 - my text2
13 - 1 - cool
13 - 2 - cool2
13 - 3 - cool3

现在,我想将这些数据加载到一个包含4列的CellTable中(第一列是checkBoxColumn,其他3列是ID / No / Text textcolum。我还想在CheckBoxColumn的Header上放置一个SelectAllCheckBox,以便当用户点击selectAllCheckBox时,所有当前可见的复选框都被选中(原因是,单元格可以有很多页面,但它只会选择可见的那些)。

这是代码,我完成了除1之外的所有要求,即“当我点击selectAllCheckBox时,selectionModel被选中,但相应的复选框没有被选中。

这是守则。

public static final ProvidesKey<String[]> KEY_PROVIDER = new ProvidesKey<String[]>() {
      @Override
      public Object getKey(String[] item) {
        String[] itemArr={item[0],item[1]};
        return item == null ? null : itemArr;

      }
};

以下是主要的CellTable代码:

final MultiSelectionModel<String[]> selectionModel = new MultiSelectionModel<String[]>(KEY_PROVIDER);

final CellTable<String[]> cellTable = new CellTable<String[]>();

Column<String[], Boolean> checkColumn = new Column<String[], Boolean>(
                new CheckboxCell(true, false)) {
        @Override
        public Boolean getValue(String[] object) {
                // Get the value from the selection model.
                 String[] objectArr={object[0],object[1]};

                 return selectionModel.isSelected(objectArr);



         }
 };

 cellTable.setSelectionModel(selectionModel);
 CheckboxHeader selectAllCheckBoxHeader = new CheckboxHeader();
 selectAllCheckBoxHeader.addValueChangeHandler(new ValueChangeHandler(){

            @Override
            public void onValueChange(ValueChangeEvent event) {
                // TODO Auto-generated method stub
                System.out.println("test");
                for (String[] item : cellTable.getVisibleItems()) {


                    if (!selectionModel.isSelected(item)) {
                        System.out.println(Arrays.toString(item));
                      selectionModel.setSelected(item, true);

                    }
                }
            }

  });
  cellTable.addColumn(checkColumn, selectAllCheckBoxHeader);

当我抓住selectAll时,没有可见的checkBox被检查,但打印时

Set<String[]> selSet=selectionModel.getSelectedSet();
for(String[] s : selSet){
  System.out.println("Mine: "+Arrays.toString(s));
}

它显示了当前选定的项目

假设pageSize是3,那么 输出:

Mine: [12,1,my text1]
Mine: [12,2,my text2]
Mine: [13,1,cool]

因此,当selectionModel被选中时,如何使可见的复选框自动选中并且在TANDEM中被选中

注意:我也试过cellTable.setSelectionModel(selectionModel, DefaultSelectionEventManager.<String[]> createCheckboxManager());但没有工作。

1 个答案:

答案 0 :(得分:1)

我修好了 首先,只需使用item[]

public Object getKey(String[] item) {
     return item == null ? null : item;
}

&安培;那么

public Boolean getValue(String[] object) {
     return selectionModel.isSelected(object);
}

然后使用

cellTable.setSelectionModel(selectionModel, DefaultSelectionEventManager.<String[]> createCheckboxManager());

最后,它按预期工作