Advertisement

利用数据集制作水晶报表

阅读量:

在制作水晶报表之前,请先使用曾介绍过的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)

还没有任何评论哟~