2008-10-15 54 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 
}