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