使用 ListDataProvider 在 GWT DataGrid 中手动设置 rowCount 不起作用?

Posted

技术标签:

【中文标题】使用 ListDataProvider 在 GWT DataGrid 中手动设置 rowCount 不起作用?【英文标题】:Manually Setting rowCount in GWT DataGrid with a ListDataProvider does not work? 【发布时间】:2013-11-29 09:23:16 【问题描述】:

我正在使用DataGridListDataProvider 在我的应用程序中显示各种行数据。在大多数情况下,一次从服务器获取所有内容都很好。 现在,似乎有必要在分页步骤上获取数据。这意味着,我的 RPC 调用每次返回 10 个项目以及可能结果的总数。

总计数用于设置附加的SimplePager,方法是在设置行数据后手动调用datagrid.setRowCount(totalCount, true)之后在这里很重要, 因为 setRowData 还会触发一个带有具体项目数的 setRowCount 调用(在我的例子中总是 10 个)。

问题在于,在手动设置行数后,另一个参与者 ScheduledCommand 触发了 flushCommand 进而触发了 setRowCount 调用 将计数设置回 10。结果:寻呼机显示 1-10 of 10,并且寻呼机控件被禁用。

即使ListDataProvider 每次只有 10 个项目,我如何强制执行某个 rowCount?

您可能会建议使用AsyncDataProvider。但是,已经有一个相当复杂的通用设计(AbstractTablePresenter<DTO, ...> 实现所有逻辑以获取数据并将其推送到通用显示器) 它由 ListDataProviders 支持。很难解释,但实际上,我更愿意继续使用ListDataProvider

【问题讨论】:

你如何处理下一页请求? 我的 Presenter 注册为 rangeChangeEvents 的处理程序并触发加载当前页面数据的 RPC 调用。 【参考方案1】:

对于我的用例,最简单的解决方法是将我的AbstractTablePresenter 子类化为按需用例,并使用AsyncDataProvider,它带来了我需要的所有功能。关于我的设计的伤害没有预期的那么严重(敲打我的肩膀;-))。

首先尝试对ListDataProvider 进行子类化,但数据、rowCount、rowCountEvents 和附加的寻呼机对象之间的关系是如此多方面,以至于您最终会覆盖ListDataProvider 的大多数方法以及您的寻呼机实现。

【讨论】:

以上是关于使用 ListDataProvider 在 GWT DataGrid 中手动设置 rowCount 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 RPC 获取 ListDataProvider 的正确列表

可以在 AIX 上使用 google web toolkit(GWT) 吗?

如何在 GWT 中使用 XMLHttpRequest?

GWT : 用户位置

如何在GWT中使用XMLHttpRequest?

GWT 的各种异步设施