- จากปัญหาเรื่องการ close และ dispose crystal report ถ้าโค้ดของบทความก่อนหน้าแก้ไม่ได้
- ทำตามที่เพื่อนแนะนำเลยดีมั้ย คือ ส่งออกมันเป็น pdf แล้วแสดงผล pdf แทน crystal report เลยมะ ^^'
- เขียนโค้ดเหมือนเดิม เช่น สร้าง connection database, query ข้อมูล , สร้าง file.xsd
- จากนั้นนำโค้ดด้านล่างเนี๋ยต่อท้ายเลย
MemoryStream oStream;
Response.Clear();
Response.Buffer = true;
ReportDocument crReportDocument = new ReportDocument();
//crReportDocument.Load("c:\\Inetpub\\wwwroot\\ContainerRepair\\EstimateOfRepairs.rpt");
crReportDocument.Load(Server.MapPath(@"Branch.rpt"));
crReportDocument.Database.Tables[0].SetDataSource(ds.Tables[0]);
//crReportDocument.SetParameterValue("Pam1", branchCode);
CrystalReportViewer1.ReportSource = crReportDocument;
CrystalReportViewer1.DataBind();
oStream = (MemoryStream)crReportDocument.ExportToStream(ExportFormatType.PortableDocFormat);
Response.ContentType = "application/pdf";
crReportDocument.Close();
crReportDocument.Dispose();
try
{
Response.BinaryWrite(oStream.ToArray());
Response.End();
}
catch (Exception)
{}
finally
{
oStream.Flush();
oStream.Close();
oStream.Dispose();
}
- หรือ เราสามารถเขียนเป็น method แค่ส่ง reportdocument ไปก็พอได้ประมาณนี้
// ทำเป็น static public ไม่ได้หว่าติด Response นี่แหละ
void ExportPdf(ReportDocument crReportDocument)
{
MemoryStream oStream;
Response.Clear();
Response.Buffer = true;
oStream = (MemoryStream)crReportDocument.ExportToStream(ExportFormatType.PortableDocFormat);
Response.ContentType = "application/pdf";
crReportDocument.Close();
crReportDocument.Dispose();
try
{
Response.BinaryWrite(oStream.ToArray());
Response.End();
}
catch (Exception)
{ }
finally
{
oStream.Flush();
oStream.Close();
oStream.Dispose();
}
}
- โค้ดก็จะประมาณนี้
ReportDocument crReportDocument = new ReportDocument();Notes:
//crReportDocument.Load("c:\\Inetpub\\wwwroot\\ContainerRepair\\EstimateOfRepairs.rpt");
crReportDocument.Load(Server.MapPath(@"Branch.rpt"));
crReportDocument.Database.Tables[0].SetDataSource(ds.Tables[0]);
//crReportDocument.SetParameterValue("Pam1", branchCode);
//CrystalReportViewer1.ReportSource = crReportDocument;
//CrystalReportViewer1.DataBind();
ExportPdf(crReportDocument);
- โค้ดตัวอย่างนี้ ไม่ใช่การเขียนไฟล์ pdf แล้วเรียก pdf นะ
- คือ จะเป็น pdf แบบ stream อยู่ยังไม่เป็นไฟล์
- ถ้าเราต้องการสร้างไฟล์ pdf ไว้ด้วยเราต้องนำ oStream ไปเขียนเป็นไฟล์เอง
- ถ้าเป็น app เราใช้ประมาณนี้น่าจะได้ crystalReportViewer1.ExportReport();
- หรือ reportDocument.ExportToDisk(ExportFormatType.Excel, @"D:\MyFile.xls");
References:
No comments:
Post a Comment