2008-10-15 123 views
0

我想要加载数据到会话中,以便在Crystal Report Viewer中单击下一个按钮时,应该从数据表中加载数据,而不是从数据库中再次检索数据。这里去我的代码...使用会话[]和页面加载

ReportDocument rpt = new ReportDocument(); 
    DataTable resultSet = new DataTable(); 
    string reportpath = null; 

    protected void Page_Load(object sender, EventArgs e) 
    { 


     if (!Page.IsPostBack) 
     { 

      if (Request.QueryString.Get("id") == "5") 
      { 
       string publication = Request.QueryString.Get("pub"); 
       DateTime date = DateTime.Parse(Request.QueryString.Get("date")); 
       int pages = int.Parse(Request.QueryString.Get("pages")); 
       int sort = int.Parse(Request.QueryString.Get("sort")); 
       if (sort == 0) 
       { 
        reportpath = Server.MapPath("IssuesReport.rpt"); 
        rpt.Load(reportpath); 
        DataTable resultSet1 = RetrievalProcedures.IssuesReport(date,   publication, pages); 
       Session["Record"] = resultSet1; 
      } 

      DataTable report = (DataTable)Session["Record"]; 
      rpt.SetDataSource(report); 
      CrystalReportViewer1.ReportSource = rpt; 

我想这个代码,但是当我点击下一个按钮,它给我的错误是无效的报告source..i猜测会话为null所以它给我这个错误。

任何sugesstions我怎么能解决这个...

+0

这将有助于如果你的代码了所有丢失的括号放回他们属于哪里。很难说出每个if语句的范围。 – tvanfosson 2008-10-15 22:19:40

回答

1

我想你想使用的缓存对象为每个用户,而不是会议在这里唯一的密钥。

伪代码:

var data = Cache["Record_999"] as DataTable; 
if (data == null) { 
    // get from db 
    // insert into cache 
} 
SetDataSource(data); 
+0

缓存是跨请求共享的,因此来自其他人的请求将导致检索使用不同参数创建的缓存数据集。如果您在从中检索数据后应用Select()方法筛选,则可以使用缓存。根据上面的代码,会话就是你想要使用的。 – cfeduke 2008-10-16 01:14:17

0

的问题在于在不使用会话,它在于用来确定何时检索数据的逻辑。会话是在这里使用的正确方法,因为缓存是通过请求共享的 - 也就是说,如果用户B是第一个执行使用缓存而不是会话的代码的用户,则用户A将看到报告用户B刚刚配置。

if (!Page.IsPostBack) 
{ 
    if (Request.QueryString.Get("id") == "5") 
    { 
     string publication = Request.QueryString.Get("pub"); 
     DateTime date = DateTime.Parse(Request.QueryString.Get("date")); 
     int pages = int.Parse(Request.QueryString.Get("pages")); 
     int sort = int.Parse(Request.QueryString.Get("sort")); 
     // fixed the statement below to key off of session 
     if (Session["Record"] == null) 
     { 
      reportpath = Server.MapPath("IssuesReport.rpt"); 
      rpt.Load(reportpath); 
      Session["Record"] = RetrievalProcedures.IssuesReport(date, publication, pages); 
     } 

     rpt.SetDataSource((DataTable)Session["Record"]); 
     CrystalReportViewer1.ReportSource = rpt; 
     // .... 
    } 
}  
0

`难道那种不是0?如果sort不是0并且用户第一次访问该页面(Session [“Record”]之前未设置),他可能会得到该错误。 可能也想尝试:

if(sort==0 || Session["Record"] == null) 
{ 
// do your magic 
}