telerik radGrid - 在排序/分页/过滤器上保持客户端状态

telerik radGrid - persist client state on sort/paging/filter

本文关键字:状态 客户端 过滤器 分页 radGrid 排序 telerik      更新时间:2023-09-26

即使在这个 ajax 示例中我真的很喜欢它的外观,当顶级网格被排序时,您正在做的事情的"状态"消失了"

例如

打开第一个人行(Nancy Davolio),以便您可以看到"销售"网格

在"销售"网格中按订单合计排序

在顶级网格中按出生日期排序

南希·达沃伊洛现在应该排在第二位。打开她的行。

销售网格不再按订单总计排序

这可能看起来微不足道,或者我很挑剔;然而:

如果我在销售网格上有一些文本框(或某种其他类型的接受用户输入的方法),我会假设在对顶级网格进行排序时它会被破坏。我还认为,即使我在顶级网格上有此输入,对顶级网格进行排序(如果有过滤器则进行过滤)也会破坏此输入。

似乎即使是分页也会破坏这一点。

所需的行为是排序和分页,而不仅仅是"看起来"在客户端完成,因为它使用的是 ajax 请求,而是实际上是在客户端完成的。这意味着网格的实际行实际上是对客户端进行排序(过滤、分页等),以便任何客户端更改,例如向文本框添加文本,向对象添加 css 类,[或在更复杂的示例中通过 Jquery 向对象添加对 javascript 对象的引用:$("#div1").data("object",someObject)排序后会保留, 分页和筛选。

有没有办法做到这一点?

我是否明确了我想做的事情?如果没有,我很乐意澄清。

附加说明:我认为只要行数不是很大,执行这样的事情对客户端性能的影响就会很小。事实上,在重新创建所有记录、重复调用服务器/数据库时,服务器上的工作会少得多,就像我在顶部的示例一样,子页面只需要创建一次而不是两次。

查看 MasterTableView 的 HierarchyLoadMode 属性。您引用的演示使用的是HierarchyLoadMode.ServerOnDemand根据 Telerik 的文档,这意味着 ViewState 仅维护可见项的状态。因此,当详细信息网格折叠时,您将丢失其状态(例如排序顺序、页码等)。

还有其他模式。您可以选择HierarchyLoadMode.ServerBind,它维护所有明细表的 ViewState,但需要回发才能展开明细表。HierarchyLoadMode.Client呈现主表视图,所有详细信息表和项在客户端上展开/折叠 - 无需回发。其中任一模式还应保持排序顺序以及与详细信息表相关的其他状态。

我希望这有助于回答你的问题。

我最近从 Telerik 支持那里得到回复,他们的 AJAX 网格支持开箱即用的客户端绑定,仅使用平面结构进行排序、分页和过滤(如本演示所示)。

对于您的情况,您可能有两种选择:

  • 使用网格设置持久化器扩展示例 - http://demos.telerik.com/aspnet-ajax/grid/examples/programming/savinggridsettingsonperuserbasis/defaultcs.aspx
  • 实现自定义解决方案以模拟具有客户端绑定的层次结构,如本博客文章中所述。