轉帖|使用教程|編輯:我只采一朵|2014-04-08 10:13:08.000|閱讀 2798 次
概述:本文跟大家分享了如何讓水晶報表動態傳遞參數并形成報表。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
我最近做了個小東西,要用到打印--數據輸出,于是選擇了水晶報表。 我用的是水晶報表VS2010。對于在報表中連接數據庫,相對比較簡單,下面想跟大家分享下如何讓報表動態傳遞參數,然后形成報表文件,這可能在實際工作地很多情況下,都用得到。
我用到的前臺技術是ASP.NET。這是.NET下關于水晶報表參數的一些API:parameterfields類、parameterfield類、parameterdiscretevalue類、parameterrangevalue類等。關于這些API的一些具體的用法,可以參考MSDN。
還要注意使用這些類的時候,要加上如下命名空間:
using CrystalDecisions.CrystalReports .Engine ;
using CrystalDecisions.Shared ;
下面來看看具體的代碼使用:
#region--------------向報表傳遞參數-------------------- ParameterFields paraFields =new ParameterFields (); ParameterField[] paraField=new ParameterField [8]; ParameterDiscreteValue[] discreteValue=new ParameterDiscreteValue [8]; ParameterRangeValue rangeValue=new ParameterRangeValue (); paraField[0]=new ParameterField (); paraField[0].ParameterFieldName ="Name"; discreteValue[0]=new ParameterDiscreteValue (); discreteValue[0].Value =(string)Session["Name"]; paraField[0].CurrentValues .Add (discreteValue[0]); paraField[1]=new ParameterField (); paraField[1].Name ="MajorName"; discreteValue[1]=new ParameterDiscreteValue (); discreteValue[1].Value =(string)Session["MajorName"]; paraField[1].CurrentValues .Add (discreteValue[1] ); paraField[2]=new ParameterField (); paraField[2].Name ="YearName"; discreteValue[2]=new ParameterDiscreteValue (); discreteValue[2].Value =(string)Session["YearName"]; paraField[2].CurrentValues .Add (discreteValue[2]); paraField[3]=new ParameterField (); paraField[3].Name ="TuitionPay"; discreteValue[3]=new ParameterDiscreteValue (); discreteValue[3].Value =Convert.ToDecimal (Session["TuitionPay"]); paraField[3].CurrentValues .Add (discreteValue[3]); paraField[4]=new ParameterField (); paraField[4].Name ="TuitionOwed"; discreteValue[4]=new ParameterDiscreteValue (); discreteValue[4].Value =Convert.ToDecimal (Session["TuitionOwed"]); paraField[4].CurrentValues .Add (discreteValue[4]); paraField[5]=new ParameterField (); paraField[5].Name ="Year"; discreteValue[5]=new ParameterDiscreteValue (); discreteValue[5].Value =(string)Session["Year"]; paraField[5].CurrentValues .Add (discreteValue[5]); paraField[6]=new ParameterField (); paraField[6].Name ="Month"; discreteValue[6]=new ParameterDiscreteValue (); discreteValue[6].Value =(string)Session["Month"]; paraField[6].CurrentValues .Add (discreteValue[6]); paraField[7]=new ParameterField (); paraField[7].Name ="Day"; discreteValue[7]=new ParameterDiscreteValue (); discreteValue[7].Value =(string)Session["Day"]; paraField[7].CurrentValues .Add (discreteValue[7]); foreach(ParameterField pf in paraField) { paraFields.Add (pf); } ReportDocument rptdoc=new ReportDocument (); rptdoc.Load (Server.MapPath ("../agreementTest.rpt")); this.CrystalReportViewer1.ReportSource =rptdoc; this.CrystalReportViewer1.ParameterFieldInfo =paraFields; this.CrystalReportViewer1 .DataBind (); //this.CrystalReportViewer1 .RefreshReport (); #endregion
需要說明的是,必須在水晶報表里面先創建這些參數,才可以使用(而且報表里的參數和代碼里的參數保持一致)。另外就是在水晶報表10里參數創建的時候,可以選擇創建離散值參數(discrete),也可以選擇創建連續值參數(range),那么對應的代碼中要用不同的類(parameterdiscretevalue和parameterrangevalue)。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件