【问题标题】:Overriding Telerik Radgrid data binding覆盖 Telerik Radgrid 数据绑定
【发布时间】:2013-07-02 11:55:25
【问题描述】:

我有一个场景,目前在一个页面上使用了 Telerik radgrid(网络表单),该页面当前允许 Telerik 控制分页、排序、过滤等。但是我注意到,因为它使用默认的 Telerik 行为来执行这些任务这一切都在内存中,所以没有什么是延迟加载的。

在这种情况下,会返回超过 300,000 行(一次 120 万行),这似乎在每次分页、排序等时都会重新查询,这非常慢。

现在我想将这些问题推送到服务器端,因为目前数据库交互是通过 linq to sql 发生的,所以我想而不是仅仅使用基础(300k 查询)采用可组合的 IQueryable 然后添加过滤,从telerik控件中排序和分页逻辑,因为数据似乎都在那里,我只是不知道什么时候应该拦截控件数据绑定以强制它只获取它需要的数据。

从我目前的调查来看,有一个 OnSortCommand 方法,它似乎在请求排序时触发,所以我假设我可以从那里得到 SortExpression 并将其放入 linq 查询中,然后还有FilterExpression 可以用来约束查询中的结果,最后还有 PageSizeCurrentPageIndex 变量,它们可以让我计算出我应该带回多少页。

所以约束查询所需的所有数据都存在那里,但是我不知道什么时候应该拦截绑定过程,就像我要拦截 OnDataBinding 并覆盖 DataSource 以考虑过滤器表达式和分页详细信息(因为在我知道排序命令之前排序不可用)然后我希望只有一个查询可以拉回 50 行(或任何页面大小),但是它似乎执行 300k 查询,然后之后进行 50 行查询,所以我很困惑是否应该拦截另一个事件或方法。

如果有人能指出我应该拦截/覆盖的方向,我将非常感激,因为 Telerik 为此提供的文档不是很好。

== 编辑 ==

只是为了更具体地了解该场景,我并不是真的想在内部创建数据源(高级数据绑定),因为它们需要是可重用的组件,因此控件是在 aspx 页面上创建的,然后在页面加载后面的代码将使用描述查询的 IQueryable 对象(300k 对象)设置DataSource,然后在这个继承的控件中,我希望能够使用filterexpressionsortexpression、@987654331 @ 和 pageindex 追加到查询。所以数据源是在这个类外部提供的。

== 编辑 2 ==

为了让更多人关注我困惑的症结,目前对我来说最莫名其妙的事情之一是我的网格正在执行 3 个查询:

  • 一种是从 IQueryable 中获取虚拟行数,这样可以按预期返回计数
  • 第二个是未更改的 300k 查询,我不知道为什么会发生这种情况
  • 第三个是带回 50 行的更改查询

由于我已经覆盖了 OnDataBinding 方法,我不知道它还会从哪里提取这些数据,因为 DataSourceOnDataBinding 结束之前更新,然后具有更改后的 IQueryable。因此,当我不想要它时,它会在Telerik Land 中做一些事情来获取这些数据,为什么要进行大量查询来获取所有数据,然后稍后再查询最小数量?没有意义...

【问题讨论】:

    标签: c# webforms telerik lazy-loading radgrid


    【解决方案1】:
    1. Custom Pagging
    2. Custom Sorting :- 请检查此链接中的“RadGrid2”。
    3. Custom Filtering

    为了实现这一点,我建议不要使用AdvanaceDataBinding,因为它很难管理。

    请尝试在我们绑定 asp:Gridview 时绑定 Radgird。

    【讨论】:

    • 感谢您提供的链接,我已经查看了它们并基于此实现了一些当前的实现,但是示例是 1 个特定场景,例如在排序事件中访问排序条件,如果我需要在该事件之外获取排序表达式吗?例如当页面索引更改时,我无权访问事件SortExpression 数据。此外,我从原始 RadGrid 继承了我自己的 LazyLoadedRadGrid,因此我着眼于重写方法,而不仅仅是拦截事件,这就是文档似乎缺乏的地方,+1 以获得简洁的链接!
    • 为此,您必须将此信息存储在视图状态中。例如:我们在 asp:girdview.stackoverflow.com/questions/702600/… 中保存视图状态中的排序方向
    • 哦,对了,如果这是最佳实践,那么排序会这样做。
    • OnDataBinding 是 radgrid 进入数据库的 ONLY 点吗?还是可以在其他地方发生? (例如OnSortCommandOnPageIndexChanged)目前它似乎正在执行2 个查询,即使OnDataBinding 只被击中一次,尽管我随后委托给base.OnDataBinding(e);
    • 你可以看看这个链接,可能对你有帮助吗?telerik.com/help/aspnet-ajax/…如果有任何问题,请告诉我。
    猜你喜欢
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多