我有一种方法可以将报告呈现为PDF,以便可以将其附加到电子邮件中。代码如下:
private string generate_pdf_report(int ponum)
{
this.DataTable1TableAdapter.Fill(this.reportdataset.DataTable1, ponum);
Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string filenameExtension;
string filename = "Purchase Requisition " + ponum.ToString() + ".pdf";
byte[] bytes = reportViewer1.LocalReport.Render(
"PDF", null, out mimeType, out encoding, out filenameExtension,
out streamids, out warnings);
try
{
using (FileStream fs = new FileStream(filename, FileMode.Create))
{
fs.Write(bytes, 0, bytes.Length);
}
}
catch(Exception ex)
{
throw ex;
}
return filename;
}
第一次运行正常,但如果用户生成另一个报告并发送电子邮件,则附加到电子邮件的报告是生成的第一个报告,而不是当前生成的报告。
例如,用户打开软件,创建采购订单#3,并生成PDF并通过电子邮件正确发送。然后,用户在不退出软件的情况下创建新的采购订单#4。提交#4后,附在电子邮件上的PDF来自#3,就像ReportViewer
没有清除以前的数据一样。
即使使用ReportViewer
界面生成新报告,也不会影响附加到电子邮件的内容。我尝试在渲染之间清除ReportViewer
无效。
我在这里缺少什么?
答案 0 :(得分:0)
我能够通过重置函数的每次迭代重置ReportDataSource来解决问题:
this.DataTable1TableAdapter.Fill(this.reportdataset.DataTable1, ponum);
DataTable dt = new DataTable();
dt = DataTable1TableAdapter.GetData(ponum);
Microsoft.Reporting.WinForms.ReportDataSource rprtDTSource = new Microsoft.Reporting.WinForms.ReportDataSource(dt.TableName, dt);
reportViewer1.LocalReport.DataSources.Add(rprtDTSource);
Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string filenameExtension;
string filename = "Purchase Requisition " + ponum.ToString() + ".pdf";
byte[] bytes = reportViewer1.LocalReport.Render(
"PDF", null, out mimeType, out encoding, out filenameExtension,
out streamids, out warnings);
try
{
using (FileStream fs = new FileStream(filename, FileMode.Create))
{
fs.Write(bytes, 0, bytes.Length);
fs.Flush();
}
}
catch (Exception ex)
{
throw ex;
}
return filename;