【问题标题】:GWT DataGrid/CellTable: Select all over multiple pagesGWT DataGrid/CellTable:选择多个页面
【发布时间】:2012-12-04 12:57:44
【问题描述】:

我正在使用带有DataGrid 和SimplePager 以及MultiSelectionModel 的GWT 2.4。我想在 all 页面上实现一个简单的 select-all 功能。

我只能选择当前页面上的所有可见项目。选择所有页面上的所有项目的最佳方法是什么?

我知道MultiSelectionModel 将ProvidesKey 对象提供的代理密钥存储在HashMap 中。我想我必须从服务器请求所有代理对象或至少所有 keys。但实际上我不想在服务器端存储有关 ProvidesKey´s getKey()-method 的信息。但我也无法访问所选代理密钥的MultiSelectionModel´s HashMap。这一切看起来都很麻烦,那么有没有更好的方法来解决这个问题?

【问题讨论】:

  • 你能用相关代码sn-ps更新你的问题吗?目前尚不清楚您为什么要尝试处理 getKey 或 ProvidesKey。

标签: gwt datagrid pager celltable selectionmodel


【解决方案1】:

如https://developers.google.com/web-toolkit/doc/latest/DevGuideUiCellWidgets#selection 中所述,实现此目的的一种方法是实现您自己的 SelectionModel(例如,通过扩展 AbstractSelectionModel 或 DefaultSelectionModel):

一个复杂的实现可以处理跨多个页面的“全选”,使用一个布尔值来指示所有内容都被选中,然后跟踪否定选择。

【讨论】:

  • 感谢您的回答。我认为跟踪负面选择是一个好方法。我会尝试实现我自己的SelectionModel。
【解决方案2】:

为什么全选需要所有键?当您从列表中选择 一些 个对象时,您需要记住选择了哪些对象,但是当您选择 所有 个对象时,您需要一个布尔值:

// on click Select All button/checkbox
boolean selectAll = true;
// ask a user what he wants to do
// send a request to server with a parameter selectAll to update/delete all objects

【讨论】:

  • 感谢您的回答。那是我的第一个方法。但是在设置了 selectAll 标志之后,我不知道如何在没有合理努力的情况下处理任何进一步的更改。我认为我的重点是在实施我自己的 SelectionModel 时跟踪否定选择,如 Chris Lercher 的帖子中所述。
【解决方案3】:

仅当您不延迟加载时,才能跨多个页面选择所有内容。首先,为什么需要全选?如果您想对所有网格数据执行一些操作,您将拥有该列表,您可以直接在列表上执行您的操作。尽管如此,您可以通过遍历列表并在每个项目上使用以下 API 来选择多个页面上网格的所有行。

 public void setSelected(T item, boolean selected);

注意: 这仅在您不延迟加载时有效。

【讨论】:

  • 感谢您的回答。之后我需要全选并从选定的集合中删除一些项目。所以我不能直接对整个列表进行操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多