利用数据集制作水晶报表
发布时间
阅读量:
阅读量
在制作水晶报表之前,请先使用曾介绍过的SAP Crystal Reports Developer缩写为CRforVS的插件来创建一个报表模板。安装该插件后,在解决方案资源管理器中选择现有文件夹或新建一个文件夹,并右键点击选择新建项,在位于已安装目录下的'Reporting'选项中打开'Crystal Reports'文件进行命名和添加操作。

选择“作为空白报表”。

模板差不多建成这个样子:

关于水晶报表打印控制器的工作原理如下所述:
首先执行筛选操作以过滤所需的数据记录,
随后创建一个包含所有必要的字段的数据集与表结构,
接着向表中添加新增字段,
随后逐条遍历并追加对应的数据记录到表中,
之后将这些处理后的结果与集中存储的数据集合进行合并,
最终获取目标报表文件的真实路径,
并将该模板导入至报告打印控制器中的ReportDocument对象中,
随后指定该系统报告作为其数据来源,
并将 ReportDocument 转换为一个流对象,
最后输出该流作为所需的具体文档格式。
public ActionResult SupplierPrint(string strConditions)
{
//查询数据
List<SupplierVo> listSupplier = list.ToList();
//1、实例数据集
DS_Data dsReport = new DS_Data();
//实例table
DataTable dt = new DataTable();
//给table添加列
dt.Columns.Add("supplierName");
dt.Columns.Add("contactPerson");
dt.Columns.Add("initialPayable", typeof(decimal));
dt.Columns.Add("paymentMethod");
dt.Columns.Add("contactAddress");
dt.Columns.Add("defaultNo");
dt.Columns.Add("disabledNo");
dt.Columns.Add("remark");
//遍历查询的表格的数据
foreach (SupplierVo item in list)
{
DataRow dr = dt.NewRow();
dr["supplierName"] = item.supplierName;
dr["contactPerson"] = item.contactPerson;
dr["initialPayable"] = item.initialPayable;
dr["paymentMethod"] = item.paymentMethod;
dr["contactAddress"] = item.contactAddress;
dr["defaultNo"] = item.defaultNo==true? "是":"否";
dr["disabledNo"] = item.disabledNo == true ? "是" : "否";
dr["remark"] = item.remark;
//给table添加行数据
dt.Rows.Add(dr);
}
//2、合并:把查询出来的表格和数据集中的表合并
dsReport.Tables["DTSupplier"].Merge(dt);
//实例化报表
ReportDocument rd = new ReportDocument();
//获取报表物理文件地址
string strRptPath = System.Web.HttpContext.Current.Server.MapPath("~/") + "Areas\ CRP\ CRP_Supplier.rpt";
rd.Load(strRptPath);//把报表文件加载到ReportDocument
rd.SetDataSource(dsReport); //设置报表数据源
Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); //把ReportDocument转化为文件流
return File(stream, "application/pdf"); //返回 文档格式
}
最后通过视图的JavaScript方法请求调用这个方法。
全部评论 (0)
还没有任何评论哟~
