使用 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 【问题描述】:我正在使用DataGrid
和ListDataProvider
在我的应用程序中显示各种行数据。在大多数情况下,一次从服务器获取所有内容都很好。
现在,似乎有必要在分页步骤上获取数据。这意味着,我的 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 的正确列表