C# 覆盖Telerik Radgrid数据绑定

C# 覆盖Telerik Radgrid数据绑定,c#,webforms,telerik,lazy-loading,radgrid,C#,Webforms,Telerik,Lazy Loading,Radgrid,我有一个场景,当前在一个页面上使用telerik radgrid(webforms),该页面当前允许telerik控制分页、排序、过滤等。然而,我注意到,由于这些任务使用默认telerik行为,它在内存中完成所有任务,因此不会延迟加载任何内容 在这种情况下,返回的行数超过300000行(一次返回120万行),并且每次分页、排序等时都会重新查询,速度非常慢 现在我想把这些问题推到服务器端,因为目前数据库交互是通过linq到sql进行的,所以我不想只使用基本查询(300k查询),而是使用可组合IQu

我有一个场景,当前在一个页面上使用telerik radgrid(webforms),该页面当前允许telerik控制分页、排序、过滤等。然而,我注意到,由于这些任务使用默认telerik行为,它在内存中完成所有任务,因此不会延迟加载任何内容

在这种情况下,返回的行数超过300000行(一次返回120万行),并且每次分页、排序等时都会重新查询,速度非常慢

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

根据我目前的调查,有一个
OnSortCommand
方法,它似乎是在请求排序时触发的,因此我假设从那里我可以得到
SortExpression
并将其放入linq查询,然后还有一个
filtereexpression
,我可以使用它来约束查询中的结果,最后还有
PageSize
CurrentPageIndex
变量,它们允许我计算出应该返回多少页

因此,约束查询所需的所有数据都存在,但是我不知道什么时候应该拦截绑定过程,就像当前拦截
OnDataBinding
并覆盖
DataSource
以考虑filterexpression和分页详细信息一样(据我所知,排序命令发出之前是不可用的)然后我希望只有一个查询可以返回50行(或者不管页面大小如何),但是它似乎要执行300k查询,然后再执行50行查询,所以我很困惑是否应该截取另一个事件或方法

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

==编辑==

更具体地说,我并不想在内部创建数据源(高级数据绑定),因为它们需要是可重用的组件,因此控件在aspx页面上创建,然后在页面加载时的代码隐藏中,它将使用描述查询的IQueryable对象设置
数据源
(300k),然后在这个继承的控件中,我希望能够使用
filterexpression
sortexpression
pagesize
pageindex
附加到查询中。因此,数据源是在这个类的外部提供的

==编辑2==

为了让更多的人注意到我困惑的症结所在,我目前最困惑的事情之一是我的网格正在执行3个查询:

  • 一种是从IQueryable中获取虚拟行计数,这很好,可以按预期返回计数
  • 第二个是不变的300k查询,我不知道为什么会发生这种情况
  • 第三个是修改后的查询,返回50行
由于我已经覆盖了
OnDataBinding
方法,我不知道它还将从何处提取此数据,因为
DataSource
OnDataBinding
结束之前更新,然后更改IQueryable。因此,在某个时候,它会在
Telerik Land
中做一些事情,以便在我不需要时获取此数据想知道吗,为什么要做一个巨大的查询来获取所有数据,然后只查询最少量的数据呢?没有意义

  • :-请检查此链接中的“RadGrid2”
  • 为了实现这一点,我建议不要使用AdvanceDataBinding,因为使用它很难管理


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

    感谢这些链接,我已经查看了它们,并且当前的一些实现基于这些链接,但是示例是1个特定的场景,例如在排序事件中访问排序条件,如果我需要在该事件之外获取排序表达式怎么办?例如何时页面索引发生变化,我无法访问事件
    SortExpression
    数据。此外,我从原始RadGrid继承了我自己的LazyLoadedRadGrid,因此我正在研究覆盖方法,而不仅仅是拦截事件,而这正是文档似乎缺少的地方,+1表示简洁的链接!为此,您必须将其存储在在viewstate中形成。例如:我们将在asp:girdview中保存viewstate中的排序方向。如果这是最佳做法,那么正确的做法将用于排序。
    OnDataBinding
    是radgrid进入DB的唯一点吗?还是会发生在其他点?(例如
    OnSortCommand
    OnPageIndexChanged
    )目前它似乎在做2个查询,尽管
    OnDataBinding
    只被点击了一次,但我会委托给
    base.OnDataBinding(e);
    你能看看这个链接吗,它可能会帮助你吗?如果有任何问题,请告诉我。