在回发时分配RadGrid.DataSource
给 Linq 查询后DataSource
为空。是否可以在应用所有过滤器和排序后获取 RadGrid 使用的数据来填充网格?
编辑
唯一可用于获取数据的方法被标记为内部方法。我想我现在要放弃了。如果我稍后找到解决方案,我会在这里发布我的答案。
在回发时分配RadGrid.DataSource
给 Linq 查询后DataSource
为空。是否可以在应用所有过滤器和排序后获取 RadGrid 使用的数据来填充网格?
唯一可用于获取数据的方法被标记为内部方法。我想我现在要放弃了。如果我稍后找到解决方案,我会在这里发布我的答案。
这不是 Telerik 的事情。对于所有控件,DataSource 属性将始终为 null,除非您在每次回发时显式重新分配和重新绑定它。
您可以使用 Session 或 Cache,甚至喘息ViewState 来保留 DataSource,但我建议不要这样做。理想情况下,您在网格上执行的任何操作(如排序和分页)都应该导致再次访问数据库以获取该信息。
编辑:
避免在 Session 或 Cache 中存储此类信息的原因是因为它很大,而且每个用户。如果您的服务器上有无限的内存,那么无论如何都要在每个用户的会话和缓存中存储数据集,但大多数时候您希望保持每个用户的内存占用很小。
将这些信息存储在 ViewState 中很大程度上是浪费的,因为您只会向客户显示一小部分行,但会通过其臃肿的 ViewState 为他们提供大量下载。
最后,需要注意在数据访问级别处理分页、排序和过滤,以便您只检索要实际显示给用户的行。
Telerik 在其控件上有一个 NeedDataSource 事件处理程序。在那里设置数据源。
protected void radGridVesselSpecs_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
if (this.Vessel == null)
return;
this.radGridVesselSpecs.DataSource = this.Vessel.Specifications;
}
您有两种选择,一种是将数据源对象存储到您的会话中。或者您可以使用任何 DataSource 控件并在回发期间重新绑定它。