Push模式基本上分三步:
1、 建立DataSet1
2、 创建CrystalReport1.rpt水晶报表
3、 创建.aspx页面拖入CrystalReportViewer空间
SqlConnection con = new SqlConnection("Data Source=服务器名;Initial Catalog=数据库名;User ID=sa;pwd=密码");
//向dataset中添加数据
DataSet1 d = new DataSet1();
SqlDataAdapter da;
con.Open();
da = new SqlDataAdapter("select * from teacher", con);
da.Fill(d, "teacher");
da = new SqlDataAdapter("select * from task", con);
da.Fill(d, "task");
con.Close();
//将dataset数据绑定到水晶报表中
CrystalReport1 r = new CrystalReport1();
r.SetDataSource(d);
//显示水晶报表
CrystalReportViewer1.ReportSource = r;
问题:1、在使用pull模式时,使用多个表时需要在页面上重新写入数据库账号密码
解决:
ReportDocument reportdoc = new ReportDocument();
reportdoc.Load(" ...");//路径v
TableLogOnInfo logoninfo = new TableLogOnInfo ();
//再读入每个表时添加数据库信息
foreach (CrystalDecisions.CrystalReports.Engine.Table table in reportdoc.Data)
{
logoninfo = table.LogOnInfo;
logoninfo.connectioninfo.servername = "www";
logoninfo.connectioninfo.databasename = "archives";
logoninfo.connectioninfo.userid = "sa";
logoninfo.connectioninfo.password = "123456";
table.ApplyLogOnInfo(Logoninfo);
}
crystalreportviewer1.reportsource = reportdoc ;
2、水晶报表导出和打印
导出:
myReport ReportDoc = new myReport();//表表的名称
private void btnExport_Click(object sender, System.EventArgs e)
{
CrystalDecisions.Shared.DiskFileDestinationOptions DiskOpts = new CrystalDecisions.Shared.DiskFileDestinationOptions();
ReportDoc.ExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile;
switch (DropDownList1.SelectedItem.Text)
{
case "Rich Text (RTF)":
ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.RichText;
DiskOpts.DiskFileName = "d:\\demo.rtf";
break;
case "Portable Document (PDF)":
ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;
DiskOpts.DiskFileName = "d:\\demo.pdf";
break;
case "MS Word (DOC)":
ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.WordForWindows;
DiskOpts.DiskFileName = "d:\\demo.doc";
break;
case "MS Excel (XLS)":
ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.Excel;
DiskOpts.DiskFileName = "d:\\demo.xls";
break;
default:
break;
}
ReportDoc.ExportOptions.DestinationOptions = DiskOpts;
ReportDoc.Export();
}
打印:
private void btnPrint_Click(object sender, System.EventArgs e)
{
string strPrinterName; // 指定打印机名称
strPrinterName = @"Canon Bubble-Jet BJC-210SP";
PageMargins margins; // 设置打印页边距
margins = ReportDoc.PrintOptions.PageMargins;
margins.bottomMargin = 250;
margins.leftMargin = 350;
margins.rightMargin = 350;
margins.topMargin = 450;
ReportDoc.PrintOptions.ApplyPageMargins(margins);
ReportDoc.PrintOptions.PrinterName = strPrinterName; //应用打印机名称
// 打印报表.startPageN 和 endPageN
// 参数设置为 0 表示打印所有页。
ReportDoc.PrintToPrinter(1, false,0,0);
}
3、 水晶报表不显示图片的解决方法
<system.web>
<httpHandlers>
<add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
</httpHandlers>
</system.web>
<appSettings>
<add key="CrystalImageCleaner-AutoStart" value="true" />
<add key="CrystalImageCleaner-Sleep" value="60000" />
<add key="CrystalImageCleaner-Age" value="120000" />
</appSettings>