与监视动态变化数据的“仪表板”应用程序中的网格一样,我的 (Telerik) Kendo UI 网格每隔 60 秒定期用新数据刷新:
grid.dataSource.data(freshData);
grid.refresh(); // have been informed this refresh may not be necessary
架构不会更改,但一些新行可能会显示在数据集中,而一些新行可能已被删除。
尽管grid.refresh()
保留分组完好无损,并且排序状态也被保留,但任何折叠的组都会被扩展。
问题:如何保留(或恢复)组的展开/折叠状态(因此,专注于特定展开组而其他组折叠的用户不会因每个组被重新展开的定期更新而感到不便/沮丧默认)?
编辑:一些 Winforms 网格提供了一种在刷新数据之前对组展开/折叠状态“拍摄快照”的方法,然后在数据源刷新后重新应用该状态。如果 Kendo UI 网格中的组标题行具有 UID(在刷新后仍然存在),则可以完成。 但请参阅下面不涉及持久 UID 的建议方法。
用例:这是此功能的一个典型但有些戏剧性的用例。疾病控制中心正在按城市实时监测特定流感病毒的爆发情况。每 15 秒刷新一次数据集。他们碰巧现在专注于洛杉矶,并扩大了那个城市,而其他城市则倒塌了。如果整个网格每 15 秒膨胀一次,就会激怒 CDC 的医生,他们进去勒死程序员,然后回家打高尔夫球,洛杉矶的每个人都屈服了。剑道真的要为那场灾难负责吗?
可能的功能增强建议:忽略我对上述 UID 的建议。这是一个更好的方法。网格有
<div class="k-group-indicator" data-field="{groupedByDataFieldName}">
...
</div>
现在,如果该 k-group-indicator div 可以包含不同值的列表,data-field
每个键的关联数据是相应部分的展开/折叠状态,则可以在制作之前将该列表保存到缓冲区中调用 dataSource.data(someNewData) 方法,然后在监听 dataBound 事件的事件处理程序中,可以重新应用这些展开状态。要找到分组值的相应分组部分,如果k-grouping-row
可以有一个名为的属性group-data-value
来保存特定分组部分的分组值,例如“销售”或“市场营销”,如果一个按数据分组 -字段称为部门。
<div class="k-group-indicator" data-field="dept" data-title="Dept" data-dir="asc">
...
<div class="k-group-distinct-values">
<div group-data-value="Sales" aria-expanded="false" />
<div group-data-value="Events Planning" aria-expanded="true" />
</div>
</div>
然后在k-grouping-row
: <tr class="k-grouping-row" group-data-value="Sales">