【问题标题】:telerik radgrid datasource null after postback回发后 Telerik radgrid 数据源为空
【发布时间】:2010-07-13 21:02:19
【问题描述】:

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

编辑

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

【问题讨论】:

    标签: c# telerik telerik-grid


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 有趣。您知道是否仍然可以从网格本身获取数据? (不仅仅是可见的行)
    • 理想情况下,只有可见行是您从数据库中检索的行。其他任何东西都会丢失。所有数据基本上都被转换为填充网格上可见行所需的值。所以...除非您使用 SqlDataSource 之类的东西,否则您无法真正检索出强类型值,但即使这样通常也会在每次回发时重新绑定数据源。
    • 通过网站,您看到的只是可见的行,页面上没有其他内容(似乎),但telerik 有某种可用的缓存选项。所以我希望能够直接访问它——我确实找到了这个this.RadGrid2.MasterTableView.Controls(0).Rows,其中包含我需要的东西,所以我要去那个方向看看我找到了什么,然后我会回到这里......谢谢到目前为止
    • 对初级读者的一个小说明:Josh 似乎暗示如果您有每个用户不是唯一的大数据,那么 Session 是一个更好的解决方案,但 Session 始终是每个用户唯一的(因此得名) .
    • @cdonner - 我不确定你是如何从我写的内容中推断出这种推理的。我从来没有说过你什么时候应该使用Session,只是说你的每个用户的内存占用应该非常小。
    【解决方案2】:

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

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

    【讨论】:

    • 这仍然会强制从数据库中进行另一次提取。最初的问题仍然是 DataSource 没有在回发中持久化。
    • 这取决于您如何对页面进行编码。在上面的示例中,this.Vessel 是一个在设置时添加到 ViewState 并在获取时从 ViewState 中检索的属性。在我的 Page_Load(!IsPostBack) 上,我使用数据库中的数据设置属性。它是在回发时从 viewstate 中检索的,因此不需要新的 db 调用。
    • 设置数据源没有问题。我正在尝试在回发后检索现有数据。因为我知道 Telerik 正在缓存我的数据,所以我宁愿不重新缓存它或将其发送到视图状态......
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2014-12-27
      相关资源
      最近更新 更多