覆盖Telerik Radgrid数据绑定

时间:2013-07-04 12:56:47

标签: c# webforms telerik lazy-loading radgrid

我有一个场景,目前在页面上使用telerik radgrid(webforms),目前允许telerik控制分页,排序,过滤等。但是我注意到,因为这使用了默认的telerik行为来执行这些任务这一切都在记忆中,所以没有什么是懒惰的。

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

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

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

所以限制查询所需的所有数据都存在于那里,但是我不知道当我拦截OnDataBinding并覆盖DataSource时我应该截取当前的绑定过程考虑filterexpression和分页详细信息(因为排序在我知道的排序命令之前不可用)然后我希望只有一个查询可以回退50行(或任何页面大小),但它似乎做了300k查询,然后进行50行查询,所以我很困惑,如果我应该拦截另一个事件或方法。

如果有人能指出我应该拦截/覆盖的方向,我会非常感激,因为telerik为此提供的文件并不是那么好。

==编辑==

为了更具体地说明这个场景,我不是真的想在内部创建数据源(高级数据绑定),因为它们需要是可重用的组件,因此控件是在aspx页面上创建的,然后是在页面加载后面的代码它会设置DataSource一个描述查询的IQueryable对象(300k一个),然后在这个继承的控件中我希望能够使用filterexpression,{{ 1}},sortexpressionpagesize附加到查询中。因此,数据源是在此类外部提供的。

==编辑2 ==

为了更多地关注我的困惑的关键,目前对我来说最令人困惑的事情之一就是我的网格正在进行3次查询:

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

由于我已经覆盖了pageindex方法,我不知道它将从哪里提取此数据,因为OnDataBindingDataSource结束之前更新为有改变的IQueryable。因此,当我不想要它时,在某些时候在OnDataBinding中执行某些操作来获取此数据,为什么要进行大量查询来获取所有数据,然后才查询最小量?毫无意义......

1 个答案:

答案 0 :(得分:1)

  1. Custom Pagging
  2. Custom Sorting: - 请在此链接中查看“RadGrid2”。
  3. Custom Filtering
  4. 为了达到这个目的,我应该建议不要使用AdvanaceDataBinding,因为这很难管理。

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