Telerik Kendo 和 ASP.Net 网格:在客户端保留组 Expand/Collapse 状态
Telerik Kendo and ASP.Net Grids: Preserve Group Expand/Collapse state on client
默认情况下,Telerik RadGrid(UI for ASP.NET AJAX)和 Kendo UI 网格控件重置所有组 expand/collapse刷新网格时的状态。 Kendo 网格甚至不允许指定默认的 expand/collapse 状态。到目前为止我找到的所有解决方案要么不完整要么有问题。
这是我正在寻找的内容,但在网络上的各种 telerik 和社区示例中并不完全可用:
- 用 TypeScript 编写以减少实现和编码错误。
- 网格数据刷新后保持状态(客户端数据源或AJAX、排序等)。
- 即使 sub-groups 在多个 parent 组中具有相同的 names/values 也保持状态(跟踪组的完整路径,而不仅仅是组名本身)。
- 自动跟踪展开和折叠状态(默认情况下您的网格可以折叠或展开)并在适当时清除保存的分组数据以减少内存使用。
- 在检测到状态更改时保存所有组的状态,从而涵盖多个组在单击事件后可能 expanded/collapsed 的场景(例如 expand/collapse parents and/or children同时)。
- 包括用于指定默认切换状态的智能功能(在应用 startup/first 组时),这允许 expanding/collapsing 所有行而不覆盖以前的用户状态(或 expand/collapse 在第一次加载时) .
- 包括 ToggleAllGroups 方法。
- 异步组状态保存以确保用户体验不会受到负面影响。
- 网格位置保存并与特定页码关联,自动直观调整滚动位置,滚动动画。
- 可与 Kendo UI Grid 和 ASP.Net Grid 一起使用的核心功能,从而减少使用这两种控制集的用户的持续维护。
我在这个问题上花了一些时间,并开发了一组扩展器模块,可以很好地处理许多网格场景。此解决方案适用于 AJAX post 后台刷新和客户端数据刷新,并且适用于 Kendo UI 网格(详情请参阅示例和代码)。
扩展器 class 基本上遍历网格的 DOM(尽可能利用可用的 Telerik 客户端 API)并将 "full path group keys" 保存在数组中。因为它使用 save/restore 状态的完整路径,所以即使数据发生变化并且在多个 parents 中存在重复的 sub-group header 时,它也能正常工作。不依赖于跟踪服务器上的 ever-changing 行索引值。这是 Kendo UI 的 100% client-side 功能,主要是 ASP.Net RadGrid 的 client-side 功能(一些数据需要添加到 RadGrid 组 header pre-render 上的元素,因为它的 client-side API 缺少一些关键的 methods/data).
我不会post这里的代码,因为扩展程序很长,但它被设计为仅公开 5 个方法。它应该适用于大多数 RadGrid 和 Kendo 网格场景。要获取最新的源代码,请转到 this GitHub repository。扩展器组织得非常好,因此您应该能够弄清楚并轻松调整以满足您的特定需求。
默认情况下,Telerik RadGrid(UI for ASP.NET AJAX)和 Kendo UI 网格控件重置所有组 expand/collapse刷新网格时的状态。 Kendo 网格甚至不允许指定默认的 expand/collapse 状态。到目前为止我找到的所有解决方案要么不完整要么有问题。
这是我正在寻找的内容,但在网络上的各种 telerik 和社区示例中并不完全可用:
- 用 TypeScript 编写以减少实现和编码错误。
- 网格数据刷新后保持状态(客户端数据源或AJAX、排序等)。
- 即使 sub-groups 在多个 parent 组中具有相同的 names/values 也保持状态(跟踪组的完整路径,而不仅仅是组名本身)。
- 自动跟踪展开和折叠状态(默认情况下您的网格可以折叠或展开)并在适当时清除保存的分组数据以减少内存使用。
- 在检测到状态更改时保存所有组的状态,从而涵盖多个组在单击事件后可能 expanded/collapsed 的场景(例如 expand/collapse parents and/or children同时)。
- 包括用于指定默认切换状态的智能功能(在应用 startup/first 组时),这允许 expanding/collapsing 所有行而不覆盖以前的用户状态(或 expand/collapse 在第一次加载时) .
- 包括 ToggleAllGroups 方法。
- 异步组状态保存以确保用户体验不会受到负面影响。
- 网格位置保存并与特定页码关联,自动直观调整滚动位置,滚动动画。
- 可与 Kendo UI Grid 和 ASP.Net Grid 一起使用的核心功能,从而减少使用这两种控制集的用户的持续维护。
我在这个问题上花了一些时间,并开发了一组扩展器模块,可以很好地处理许多网格场景。此解决方案适用于 AJAX post 后台刷新和客户端数据刷新,并且适用于 Kendo UI 网格(详情请参阅示例和代码)。
扩展器 class 基本上遍历网格的 DOM(尽可能利用可用的 Telerik 客户端 API)并将 "full path group keys" 保存在数组中。因为它使用 save/restore 状态的完整路径,所以即使数据发生变化并且在多个 parents 中存在重复的 sub-group header 时,它也能正常工作。不依赖于跟踪服务器上的 ever-changing 行索引值。这是 Kendo UI 的 100% client-side 功能,主要是 ASP.Net RadGrid 的 client-side 功能(一些数据需要添加到 RadGrid 组 header pre-render 上的元素,因为它的 client-side API 缺少一些关键的 methods/data).
我不会post这里的代码,因为扩展程序很长,但它被设计为仅公开 5 个方法。它应该适用于大多数 RadGrid 和 Kendo 网格场景。要获取最新的源代码,请转到 this GitHub repository。扩展器组织得非常好,因此您应该能够弄清楚并轻松调整以满足您的特定需求。