Telerik Kendo和ASP.Net网格:在客户端保留组扩展/折叠状态

时间:2015-04-03 02:20:36

标签: asp.net html5 kendo-grid telerik-grid

默认情况下,Telerik RadGrid(ASP.NET AJAX的UI)和Kendo UI网格控件在刷新网格时重置所有组展开/折叠状态。 Kendo网格甚至不允许指定默认的展开/折叠状态。到目前为止我找到的所有解决方案都是不完整或有缺陷的。

以下是我在网上各种电传和社区示例中未能完全提供的内容:

  • 用TypeScript编写,以减少实现和编码错误。
  • 网格数据刷新后维护状态(客户端数据源或AJAX,排序等)。
  • 即使子组在多个父组中具有相同的名称/值,也可以保持状态(跟踪组的完整路径,而不仅仅是组名称)。
  • 自动跟踪Expanded和Collapsed状态(默认情况下您的网格可以折叠或展开)并在适当时清除已保存的分组数据以减少内存使用量。
  • 在检测到状态更改时保存所有组的状态,从而涵盖在单击事件后可能展开/折叠多个组的情况(例如,同时展开/折叠父项和/或子项)。
  • 包括指定默认切换状态的智能功能(在启动/应用的第一个组上),允许展开/折叠所有行而不覆盖以前的用户状态(或在首次加载时展开/折叠)。
  • 包含ToggleAllGroups方法。
  • 异步组状态保存,以确保UX不会受到负面影响。
  • 网格位置被保存并与特定页码相关联,滚动位置自动直观地调整,滚动动画。
  • 适用于Kendo UI Grid和ASP.Net Grid的核心功能,从而减少了使用这两种控制集的用户的持续维护。

1 个答案:

答案 0 :(得分:1)

我在这个问题上花了一些时间,并开发了一套扩展器模块,可以很好地适应许多网格场景。此解决方案适用于AJAX回发刷新和客户端数据刷新,并且可与Kendo UI Grid一起使用(有关详细信息,请参阅示例和代码)。

扩展器类基本上遍历网格的DOM(尽可能利用可用的Telerik客户端API)并保存"完整路径组密钥"在数组中。由于它使用完整路径来保存/恢复状态,因此即使数据发生更改以及多个父项中存在重复的子组标题,它也会起作用。不依赖于跟踪服务器上不断变化的行索引值。这是Kendo UI的100%客户端功能,主要是ASP.Net RadGrid的客户端功能(一些数据需要在预渲染时添加到RadGrid组头元素,因为它的客户端API缺少一些关键方法/数据)。

我不会在这里发布代码,因为扩展程序非常冗长,但它只是为了暴露5种方法。它应该适用于大多数RadGrid和Kendo Grid场景。要获取最新的源代码,请转到this GitHub repository。扩展器非常有条理,因此您应该能够轻松解决并轻松调整以满足您的特定需求。