水晶报表,推模式下,打印出现,通讯错误,打印将停止.拉模式没有问题
为提高性能.我写了一个缓存机制.第一次查看报表,查询的数据.我缓存了下来.第二次,如果缓存里有,就不查.直接取.现在分页,导出都没有问题.但打印有问题.不知道打印是怎么做.
查询数据应没有问题,分页,导出都可以.
代码如下
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Collections.Specialized;
using System.Configuration;
namespace ReportTest2003
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm2 : System.Web.UI.Page
{
protected CrystalDecisions.Web.CrystalReportViewer CrystalReportViewer1;
//ReportDocument ReportDoc;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
//this.LoadRpt();
}
private void LoadRpt()
{
//
// ParameterFields paramFields = new ParameterFields ();
// ParameterField paramField;
// ParameterDiscreteValue discreteVal;
//
// NameValueCollection coll=Request.QueryString;
// String[] arr1 = coll.AllKeys;
// string sKey="";
// string sValue="";
//
// for (int i = 1; i < arr1.Length; i++)
// {
// sKey=arr1[i];
// sValue=coll[i];
// paramField=new ParameterField();
// paramField.Name="@"+sKey;
// discreteVal=new ParameterDiscreteValue();
// discreteVal.Value=sValue;
// paramField.CurrentValues.Add(discreteVal);
// paramFields.Add (paramField);
// }
//
// CrystalReportViewer1.ParameterFieldInfo = paramFields;
//
// string rptFile=coll[0];
// ReportDocument ReportDoc;
// ReportDoc = new ReportDocument();
// ReportDoc.Load(Server.MapPath(@"ReportFile\"+rptFile));
//
//
// string sServerName=ConfigurationSettings.AppSettings["CrystalReportConnectServerName"];
// string sDatabaseName=ConfigurationSettings.AppSettings["CrystalReportConnectDatabaseName"];
// string sUserID=ConfigurationSettings.AppSettings["CrystalReportConnectUserID"];
// string sPassword=ConfigurationSettings.AppSettings["CrystalReportConnectPassword"];
//
//
// TableLogOnInfo logonInfo ;
// foreach( CrystalDecisions.CrystalReports.Engine.Table tb in ReportDoc.Database.Tables)
// {
// logonInfo = tb.LogOnInfo;
// logonInfo.ConnectionInfo.ServerName = sServerName;
// logonInfo.ConnectionInfo.DatabaseName = sDatabaseName;
// logonInfo.ConnectionInfo.UserID = sUserID;
// logonInfo.ConnectionInfo.Password = sPassword;
// tb.ApplyLogOnInfo(logonInfo);
//
// }
// CrystalReportViewer1.ReportSource = ReportDoc;
NameValueCollection parameters=Request.QueryString;
string rptFile=parameters[0];
NameValueCollection parameters1=new NameValueCollection();
for(int i=1;i<parameters.Count;i++)
{
parameters1.Add(parameters.AllKeys[i],parameters[i]);//localhost/ReportTest2003/ReportFile/TestPage.rpt[i]);
}
ReportDocument reportDoc = new ReportDocument();
reportDoc.Load(Server.MapPath(@"ReportFile\"+rptFile));
System.Data.DataSet ds;
ds=Facade.GetData(this.Session.SessionID,rptFile,parameters1,"sp_syswin_"+rptFile.Substring(0,rptFile.IndexOf(".")));
reportDoc.SetDataSource(ds.Tables[0]);
CrystalReportViewer1.ReportSource = reportDoc;
//this.CrystalReportViewer1.DataBind();
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
this.LoadRpt();
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}