0

在回发时分配RadGrid.DataSource给 Linq 查询后DataSource为空。是否可以在应用所有过滤器和排序后获取 RadGrid 使用的数据来填充网格?

编辑

唯一可用于获取数据的方法被标记为内部方法。我想我现在要放弃了。如果我稍后找到解决方案,我会在这里发布我的答案。

4

3 回答 3

4

这不是 Telerik 的事情。对于所有控件,DataSource 属性将始终为 null,除非您在每次回发时显式重新分配和重新绑定它。

您可以使用 Session 或 Cache,甚至喘息ViewState 来保留 DataSource,但我建议不要这样做。理想情况下,您在网格上执行的任何操作(如排序和分页)都应该导致再次访问数据库以获取该信息。

编辑:
避免在 Session 或 Cache 中存储此类信息的原因因为它很大,而且每个用户。如果您的服务器上有无限的内存,那么无论如何都要在每个用户的会话和缓存中存储数据集,但大多数时候您希望保持每个用户的内存占用很小。

将这些信息存储在 ViewState 中很大程度上是浪费的,因为您只会向客户显示一小部分行,但会通过其臃肿的 ViewState 为他们提供大量下载

最后,需要注意在数据访问级别处理分页、排序和过滤,以便您只检索要实际显示给用户的行。

于 2010-07-13T21:07:24.253 回答
3

Telerik 在其控件上有一个 NeedDataSource 事件处理程序。在那里设置数据源。

protected void radGridVesselSpecs_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
    if (this.Vessel == null)
        return;

    this.radGridVesselSpecs.DataSource = this.Vessel.Specifications;
}
于 2010-07-13T21:16:45.183 回答
0

您有两种选择,一种是将数据源对象存储到您的会话中。或者您可以使用任何 DataSource 控件并在回发期间重新绑定它。

于 2010-07-13T21:11:33.127 回答