【问题标题】:caching gridview data in session在会话中缓存 gridview 数据
【发布时间】:2011-01-28 16:49:21
【问题描述】:

我有一个带有网格视图和日历的报告页面。当用户加载页面时,默认日期是今天,当他单击日历控件中的日期时,它会加载当天的报告数据。每个用户都有不同的报告,每天的数据在 300-500 行之间。

目前,我有一个 linq 查询,它以列表的形式返回一天的数据。鉴于每个查询的数据量相对较少,我想将查询结果存储在会话中,这样我就可以从会话中进行分页和排序,而无需返回数据存储。

我要做的是一个列表列表,以便在加载查询时保存数据,直到会话超时。例如,如果用户选择了 4-5 个不同的日期,则这些查询中的每一个都保存在会话中,然后如果他再次单击其中一个日期,则函数首先检查数据是否在会话中:GetQueryFromSession( DateTime TheDate)。

我坚持这一点。如何创建与会话对象一起使用的列表列表。谢谢。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    在会话中存储字典

       private Dictionary<DateTime, System.Data.DataTable> Data
        {
            get
            {
                if (Session["data"] == null)
                {
                    Session[ "data" ] = new Dictionary<DateTime, System.Data.DataTable>();
                }
    
                return Session[ "data" ] as Dictionary<DateTime, System.Data.DataTable>;
            }
            set
            {
                Session[ "data" ] = value;
            }
        }
    

    然后您可以保留每个日期的结果集

    您也可以使用列表字典 例如:

    Dictionary<DateTime, List<YourObject>>
    

    您的获取 QueryFromSession 方法将与此类似:

    private DataTable GetQueryFromSession( DateTime TheDate)
    {
        return this.Data[TheDate];
    }
    

    或(如果您选择列表选项)

     private List<YourObject> GetQueryFromSession( DateTime TheDate)
     {
         return this.Data[TheDate];
     }
    

    【讨论】:

    • 好的,太好了。该集合如何与列表字典一起使用?
    • 好吧,您不会使用该集合来添加结果集。你会打电话给 this.data.Add(DateTime.Today, YourList/DataTable);或 this.data[DateTime.Today] = YourResultset。你会先检查它是否存在,然后添加或修改它
    • 好的,太好了!节省大量时间。我对.net 框架不是很熟悉。我是否需要指定我指的是 Session 对象中的列表?谢谢。
    • 如果您向页面添加一个属性,那么您将能够通过将键传递给字典来将其作为列表访问
    【解决方案2】:

    为什么不使用会话名称,并根据所选日期为每个数据集创建一个唯一键?

    您可以做的是按降序排列日期,将它们转换为字符串,然后将它们连接起来形成唯一 ID。

    然后使用 ID 将数据添加到会话对象中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多