在会话中缓存gridview数据

时间:2011-01-28 16:49:21

标签: asp.net

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

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

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

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

2 个答案:

答案 0 :(得分: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>>

你的get QueryFromSession方法与此类似:

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

或(如果您选择了List&lt;&gt;选项)

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

答案 1 :(得分:0)

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

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

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