目的:报表批量打印的时候,由于报表上的某些值,例如单位,参考值都是从数据库读取的,并且每一页都是重复的 所以只需直接传給报表即可 已有资料: 网上流传较多的是单值传递 单个值传递代码如下: //tempTextName为别名 //["txtAbc"]这里的"txtAbc"为报表上的Text名称,对应起来就可以了 CrystalDecisions.CrystalReports.Engine.TextObject tempTextName; tempTextName = (CrystalDecisions.CrystalReports.Engine.TextObject)oRpt.ReportDefinition.ReportObjects["txtAbc"]; 批量传递值代码如下: AveRptUri5 oRpt = new AveRptUri5(); //使用Report Engine对象模型,将此数据集传递给报表 oRpt.SetDataSource(ds.Tables[0]); //将带有数据的报表对象绑定到水晶报表查看器 crystalReportViewer1.ReportSource = oRpt; //給水晶报表中Text赋值 string[] uriParamName = ....(uriParamName为数据库查询出要与报表Text名称) if (uriParamName[i] != ""&&uriParamName[i] != null) { //tempTextName为别名,@uriParamName[i]对应水晶报表TEXT名称 CrystalDecisions.CrystalReports.Engine.TextObject tempTextName; 注意,@uriParamName[i]的内容必须和报表上的Text名字一一对应,否则这里报数组越界错误 tempTextName = (CrystalDecisions.CrystalReports.Engine.TextObject)oRpt.ReportDefinition.ReportObjects[@uriParamName[i]]; tempTextName.Text = uriParamData.Tables[0].Rows[i]["Unit"].ToString(); } //设置默认打印纸张大小 oRpt.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA4;