3

当我在包含多列的 CellTable 中选择一行时,整行将显示为黄色。它不取决于我单击的行的哪个区域(行的哪一列)。

只要没有选择此表的其他行,我尝试做的就是将所选行保持为黄色。目前,只要我单击浏览器中的其他位置,该行就会恢复其原始颜色。

我尝试使用选择模型,但这没有改变。您有什么建议吗,或者这根本不可能,因为焦点是由浏览器管理的?CellTable 的 Google 展示中的行为是相同的......

4

5 回答 5

1

选择模型实际上做了您想做的事情:它将一行绘制为蓝色,并且如果您单击页面中的其他位置,该行不会改变颜色。(只有选择另一行)

有 2 种选择模型:一种只允许您选择一行,另一种允许您选择多行。

MultiSelectionModel<Row> selectionModel = new MultiSelectionModel<Row>();
table.setSelectionModel(selectionModel);

SingleSelectionModel<Row> selectionModel = new SingleSelectionModel<Row>();
table.setSelectionModel(selectionModel);
于 2013-02-13T18:05:59.573 回答
1

user905374 的解决方案确实有效。我在第一篇文章中提到我已经尝试过使用 a 的解决方案selectionModel,但它不起作用。这是部分正确的。它确实有效,但前提是表不包含CheckboxCell.

遵循一个工作和不工作的例子。我认为这可能是一个错误,但我不确定我是否错过了什么。

    final CellTable<LicenceDto> licenseTable = new CellTable<LicenceDto>();
    final SingleSelectionModel<LicenceDto> selectionModel = new SingleSelectionModel<LicenceDto>();
    licenseTable.setSelectionModel(selectionModel);

    //--- If I add this column, the selection does work.
    Column<LicenceDto, String> workingColumn = new Column<LicenceDto, String>(new TextCell()) {

        @Override
        public String getValue(LicenceDto object) {
            return "Works";
        }
    };
    workingColumn.setFieldUpdater(new FieldUpdater<LicenceDto, String>() {

        @Override
        public void update(int index, LicenceDto object, String value) {
            ;
        }
    });
    licenseTable.addColumn(workingColumn);


    //--- If I add this column, the selection does NOT work anymore.
    Column<LicenceDto, Boolean> notWorkingColumn = new Column<LicenceDto, Boolean>(new CheckboxCell(true, true)) {

        @Override
        public Boolean getValue(LicenceDto object) {
            return object.getEnabled();
        }
    };
    notWorkingColumn.setFieldUpdater(new FieldUpdater<LicenceDto, Boolean>() {

        @Override
        public void update(int index, LicenceDto object, Boolean value) {
            presenter.enableLicense(object, value);
        }
    });
    licenseTable.addColumn(notWorkingColumn);

您甚至可以组合多个单元格并将它们添加到表格中(例如LinkActionCell等)。只要没有CheckboxCell,带有 的蓝色选择SingleSelectionModel确实像一个魅力。有没有人看到我做错了什么CheckboxCell或者有错误?


更新

这只是我的一个使用错误。问题是我设置handlesSelectiontrueCheckboxCell构造函数的第二个参数),甚至认为我什么都不处理。设置它来false解决问题。

底线:如果您不自己处理选择,请使用选择模型(例如SingleSelectionModel)并且不要将构造函数的handlesSelection参数设置为 true。trueCheckboxCell

于 2013-02-14T15:03:20.990 回答
0

您应该再次观察 Showcase 演示。这次使用最左边一列即第一列的复选框。On selection the row turns blue表示进行了行选择。这是您设置 SelectionModel 的时候。单击 CellTable/DataGrid 之外的页面任意位置selection is not changed

现在,不是通过第一列中的复选框选择行,而是单击任何其他列中的一行。该行变为黄色。单击 CellTable/DataGrid 之外的页面任意位置focus/yellow is lost

黄色”表示行处于焦点下并且正在编辑且未被选中。

注意 -您可以通过使用每个单元格的单击事件来强制选择行。

于 2013-02-13T18:30:04.350 回答
0

尝试这样的事情:

CellTable table;
YourDataObject object = new YourDataObject(...);
SingleSelectionModel<YourDataObject> selectionModel = 
                                     new SingleSelectionModel<YourDataObject>();
table.setSelectionModel(selectionModel);
...
table.setSelected(object, true);

如果MultiSelectionModel您希望突出显示多行,请使用。

于 2013-02-14T09:31:49.160 回答
0

存储选定行的索引。当用户选择行时,将行的样式更改为适合您的案例的“选定样式”(在您的 css 文件中定义)并从先前选择的行中删除选定的样式。也不要忘记更新选定行的索引。

如果您提供原始版本的一些代码,我很乐意为您提供一些代码。

于 2013-02-14T11:36:25.613 回答