在crystalReport(水晶报表)动态输入参数(转)

动态|水晶报表

命名空间为:using CrystalDecisions.Shared        

private void BuildReportViewerParameters(CrystalDecisions.Web.CrystalReportViewer rptViewer, Hashtable ParamTable)
        {
            //定义报表视图的参数的方法
            ParameterFields ParamFields = new ParameterFields();
            foreach (object key in ParamTable.Keys)
            {
                ParameterField ParamField = new ParameterField();
                ParameterValues ParamValues = new ParameterValues();
                ParameterDiscreteValue ParamValue = new ParameterDiscreteValue();
                ParamValue.Value = ParamTable[key].ToString();
                ParamValues.Add(ParamValue);
                ParamField.ParameterFieldName = key.ToString();
                ParamField.CurrentValues = ParamValues;
                ParamFields.Add(ParamField);
            }
            rptViewer.ParameterFieldInfo = ParamFields;
        }

        private void BuildReportClassParameters(CrystalDecisions.CrystalReports.Engine.ReportClass rpt, Hashtable ParamTable)
        {
            //定义报表类的参数的方法
            foreach (object key in ParamTable.Keys)
            {
                ParameterValues ParamValues = new ParameterValues();
                ParameterDiscreteValue ParamValue = new ParameterDiscreteValue();
                ParamValue.Value = ParamTable[key].ToString();
                ParamValues.Add(ParamValue);
                rpt.DataDefinition.ParameterFields[key.ToString()].ApplyCurrentValues(ParamValues);
            }
        }
        
        protected void BuildReportParameters(CrystalDecisions.Web.CrystalReportViewer rpt,Hashtable ParamTable)
        {
            //定义报表参数的方法
            ParameterFields ParamFields = new ParameterFields();

            foreach(object key in ParamTable.Keys)
            {
                ParameterField ParamField;
                ParameterValues ParamValues;
                ParameterDiscreteValue ParamValue;

                ParamField = new ParameterField();
                ParamValues = new ParameterValues();
                ParamValue = new ParameterDiscreteValue();

                ParamValue.Value = (string)ParamTable[key];
                ParamValues.Add(ParamValue);
                ParamField.ParameterFieldName=(string)key;
                ParamField.CurrentValues = ParamValues;
                ParamFields.Add(ParamField);
            }
            rpt.ParameterFieldInfo = ParamFields;
        }  

然后再你的需要调用参数的地方,加如下引用:

private void Button_output_Click(object sender, System.EventArgs e)
        {
            CrystalDecisions.Shared.TableLogOnInfo logInfo = new CrystalDecisions.Shared.TableLogOnInfo();  //设置报表的登录信息
            logInfo.ConnectionInfo.ServerName = "ANGEL";  //设置报表与库的连接信息
            logInfo.ConnectionInfo.DatabaseName = "KaoQin";
            logInfo.TableName = "Emstatistic";
            logInfo.ConnectionInfo.UserID = "sa";
            logInfo.ConnectionInfo.Password = "";
            CrystalReportViewer1.ReportSource = Server.MapPath("cr_aa.rpt"); //指定报表的数据源
            CrystalReportViewer1.LogOnInfo.Add(logInfo);//对参数进行赋什值
    //        CrystalReportViewer1.DataBind();

            //声明变量并获取导出选项
            cr_aa myReport = new cr_aa();  //定义一个名为myReport的报表
            myReport.Database.Tables[0].ApplyLogOnInfo(logInfo);  
            CrystalReportViewer1.ReportSource = myReport;
            CrystalReportViewer1.DataBind();   

            Hashtable t = new Hashtable();    
            t.Add("p_st_month", Textmonth.Text);  //为参数赋值
            BuildReportParameters(CrystalReportViewer1, t);  //调用建立报表参数的方法  
            BuildReportViewerParameters(CrystalReportViewer1, t);   //给报表浏览器添加参数
            BuildReportClassParameters(myReport, t);  //给报表类添加参数   

            CrystalDecisions.Shared.DiskFileDestinationOptions diskOpts = new CrystalDecisions.Shared.DiskFileDestinationOptions();
            //设置导出格式
            myReport.ExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile;
            myReport.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.Excel;
            //设置磁盘文件选项
            diskOpts.DiskFileName = "C:\\Documents and Settings\\Administrator\\My Documents\\kaoqin_rpt.xls";   
            myReport.ExportOptions.DestinationOptions = diskOpts;
            myReport.Export();
            Response.Write("<script language='javascript'>alert('您已经将报表成功输出到Excel文件'); window.location.href='customRpt.aspx';</" + "script>");
        }

时间: 2024-11-08 18:04:55

在crystalReport(水晶报表)动态输入参数(转)的相关文章

CrystalReport 水晶报表 动态增加记录的问题

问题描述 大家好,我在使用水晶报表时遇到一个问题,情况如下:我需要做一张装箱单标贴打印的报表,从数据库中提取出了一个字段number(箱数),并且此报表需要动态生成number这个字段的页数.而number这个字段只有一个数值,我应该怎样来实现呢?表达可能不是很准确,举例说明:数据库中的一张装箱单单据的装箱数量为5,即:number=5需要打印出5张标贴,第一张页脚显示为"共5箱,第1箱"第二张页脚显示为"共5箱,第2箱"依次类推,一共需要打印出5张纸.如果另外的一

水晶报表动态合并列单元格

问题描述 给水晶报表动态生成的分组,合并分组内对应的某列值如:配货号品牌数量(需要合并的列)001A10001B8001C7002A11(根据配货号在同一页内新生成的一组数据)002B20002C0...(如未满页,下面的生成和上面类似的分组)合并后效果配货号品牌数量(需要合并的列)001A001B25001C002A002B31002C...急!!! 解决方案 本帖最后由 gekaitiantia 于 2015-10-23 07:26:32 编辑解决方案二:up!!!!解决方案三:设置相同则抑

ASP.NET MVC 5使用CrystalReport(水晶报表)

原文:ASP.NET MVC 5使用CrystalReport(水晶报表)   http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0_15.exe (290M) 这个应该是开发包 http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_redist_install_64bit_13_0_15.zip (78.5M) 看起来像部署包   安装完成之后, 

高手看看 急得很 水晶报表动态加载显示的问题

问题描述 公式绑定,实现代码是(总是报该字段名无效,怎么回事呢!!):CR_Document.DataDefinition.FormulaFields["paraField1"].Text="{"+ds.Tables["item"].TableName+"."+ds.Tables["item"].Columns[0].ColumnName.ToString()+""}";str

水晶报表类RecordSelectionFormula参数的使用方法

问题描述 各位大神好请教个问题,水晶报表类有个RecordSelectionFormula参数可以过滤行,我使用"{DataTableAlarm.设备终端}='bin1'and{DataTableAlarm.温度探头}='det1'"可以过滤出一行,如果我还想再选中一个bin2和det2的行,应该怎么加进去呢?类似于(AandB)or(CandD)or(EandF)这种语法, 解决方案

水晶报表动态连接数据库

问题描述 现在碰到一个很刺手的问题:我想设计一个报表,然后我想在程序运行时动态绑定到数据库,但做的了很久都没有做成功,我先创建一个水晶报表,里面没有绑定到任何数据,只新建了一些我要显示的字段(未绑定字段),然后我想在程序运行时把sql语句查出来的的东西放在dataset中,然后把dataset中的某一个字段对应到我在报表中创建的未绑定的某一字段,但不知道这个怎么实现?????网上有说用:CrystalReportCustoms1.ReportDefinition.ReportObjects.It

vs2013使用水晶报表 动态加载图片不显示

问题描述 WIN10操作系统+VS2013使用CrystalReportsCRforVS_13_0_13在项目中添加了一个数据集DataTable1其中有三列S_Id,S_Name,S_Imgs其中S_imgs为Byte[]动态读取数据库数据,填充到该数据集,数据存中的S_Imgs为一个图片URL地址,下段代码将URL转换为Byte[]foreach(DataRowdrintables.Rows){using(varstreams=WebRequest.Create("http://qiniu/

水晶报表的jsp实现

js|水晶报表 最近为客户开发一个mis系统,java技术,b/s结构.客户要求系统的报表采用水晶报表.怎样在jsp中实现水晶报表呢?找遍了所有的资料,水晶报表的web实现倒是很多,但都讲的是微软的.net方案.jsp中如何实现水晶报表的动态显示呢?经过一段时间的痛苦摸索,现在把我的方案介绍给大家,希望各位大哥批评指正我的问题:需要动态的显示水晶报表,并且要根据我传递的一个参数(BH)的值动态的显示数据.并且要可以把水晶报表导出为word,excel,pdf等格式 我的解决方案:一:下载 cry

水晶报表的jsp实现(开发工具:bea weblogic workshop)

js|web|水晶报表 最近为客户开发一个mis系统,java技术,b/s结构.客户要求系统的报表采用水晶报表.怎样在jsp中实现水晶报表呢?找遍了所有的资料,水晶报表的web实现倒是很多,但都讲的是微软的.net方案.jsp中如何实现水晶报表的动态显示呢?经过一段时间的痛苦摸索,现在把我的方案介绍给大家,希望各位大哥批评指正 我的问题:需要动态的显示水晶报表,并且要根据我传递的一个参数(BH)的值动态的显示数据.并且要可以把水晶报表导出为word,excel,pdf等格式 我的解决方案:一:下