詳解C#調用水晶報表的實現(xiàn)
作者:佚名
針對C#調用水晶報表的開發(fā)過程中經(jīng)常會遇到的問題,我們來看看C#調用水晶報表的實現(xiàn)需要注意什么,以及具體的實現(xiàn)過程。
C#調用顯示水晶報表是我們開發(fā)中經(jīng)常會遇到的實用需求,那么C#調用水晶報表具體的操作是什么呢?C#調用水晶報表需要注意什么以及涉及到的方法的使用情況是什么呢?下面讓我們看看具體的開發(fā)實例:
C#調用水晶報表實實例演示:
- /// ﹤summary﹥
- /// CS下在C#調用水晶報表
- /// 水晶報表在CrystalReport9中定義,
- ///數(shù)據(jù)源可以是表、視圖、存儲過程(最后一句必須是select語句),可以包含子報表
- /// 調用實例:LoadReport
- ///(this.crystalReportViewer1,"D:\\66.rpt","kys","hrdb","sa","kys");
- ///
- /// ﹤/summary﹥
- /// ﹤param name="ReportViewer"﹥
- 報表瀏覽器CrystalDecisions.Windows.Forms.CrystalReportViewer
- ﹤/param﹥
- /// ﹤param name="StrRptPaht"﹥報表文件的路徑﹤/param﹥
- /// ﹤param name="StrServer"﹥服務器﹤/param﹥
- /// ﹤param name="StrDatabase"﹥數(shù)據(jù)庫﹤/param﹥
- /// ﹤param name="StrUser"﹥登陸名稱﹤/param﹥
- /// ﹤param name="StrPassword"﹥密碼﹤/param﹥
- public void LoadReport(
- CrystalDecisions.Windows.Forms.CrystalReportViewer
- ReportViewer,string StrRptPaht,
- string StrServer, string StrDatabase,
- string StrUser, string StrPassword)
- {
- string StrParaName="";
- string StrRptTableName="";
- string StrLocation="";
- ReportDocument Rpt =new ReportDocument();
- //表示一個報表,并且包含定義、格式化、加載、導出和打印該報表的屬性和方法
- SubreportObject SubRptObj;
- //表示放在報表中的子報表。子報表是主報表內的獨立或鏈接的報表。
- ReportDocument SubRpt;
- ParameterFields ParamFields=new ParameterFields();
- ParameterField ParamField ;
- ParameterDiscreteValue ParamDiscreteValue;
- TableLogOnInfo LogOnInfo;
- try
- {
- //C#調用水晶報表之加載報表
- Rpt.Load(StrRptPaht);
- //報表參數(shù)的賦值*******C#調用水晶報表**
- foreach(CrystalDecisions.CrystalReports.
- Engine.ParameterFieldDefinition ParaFieldDef
- in Rpt.DataDefinition.ParameterFields )
- {
- //只為主報表的參數(shù)進行賦值
- if(ParaFieldDef.ReportName=="")
- {
- StrParaName=ParaFieldDef.Name;
- ParamField=new ParameterField();
- ParamDiscreteValue=new ParameterDiscreteValue();
- ParamField.ParameterFieldName = StrParaName;
- //注:用戶自定義為參數(shù)賦值!!!!!!!!!!!!!!!!!!!!!!!!!
- if(StrParaName.ToLower()=="depid")
- ParamDiscreteValue.Value = "dg00";
- else
- ParamDiscreteValue.Value = "ky0001";
- //C#調用水晶報表
- ParamField.CurrentValues.Add (ParamDiscreteValue);
- ParamFields.Add (ParamField);
- }
- }
- //C#調用顯示水晶報表**
- // 將參數(shù)字段集合放入查看器控件。
- if(ParamFields.Count﹥0)
- ReportViewer.ParameterFieldInfo = ParamFields;
- //設置數(shù)據(jù)庫連接參數(shù)
- ConnectionInfo CnInfo = new ConnectionInfo();
- CnInfo.ServerName = StrServer;
- CnInfo.DatabaseName = StrDatabase;
- CnInfo.UserID = StrUser;
- CnInfo.Password = StrPassword;
- foreach( CrystalDecisions.CrystalReports.
- Engine.Table DTable in Rpt.Database.Tables)
- {
- LogOnInfo=DTable.LogOnInfo;
- LogOnInfo.ConnectionInfo=CnInfo;
- DTable.ApplyLogOnInfo(LogOnInfo);
- //更換服務器數(shù)據(jù)庫驗證
- StrRptTableName=DTable.Location.Substring(
- DTable.Location.LastIndexOf(".") + 1);
- StrLocation=StrDatabase+".dbo."+StrRptTableName;
- DTable.Location=StrLocation;
- }
- #region 對所有子報表更換服務器數(shù)據(jù)庫驗證
- //獲取主報表的所有子報表
- foreach (ReportObject obj in Rpt.
- ReportDefinition.ReportObjects)
- {
- //判斷是否為子報表對象
- if (obj.Kind == ReportObjectKind.SubreportObject)
- {
- SubRptObj = (SubreportObject) obj;
- SubRpt = Rpt.OpenSubreport(SubRptObj.SubreportName);
- //讀取子報表的所有數(shù)據(jù)庫表
- foreach (CrystalDecisions.CrystalReports.
- Engine.Table DTable in SubRpt.Database.Tables)
- {
- LogOnInfo = DTable.LogOnInfo;
- LogOnInfo.ConnectionInfo = CnInfo;
- //加載數(shù)據(jù)庫連接信息
- DTable.ApplyLogOnInfo(LogOnInfo);
- //更換服務器和數(shù)據(jù)庫
- StrRptTableName=DTable.Location.Substring(
- DTable.Location.LastIndexOf(".") + 1);
- StrLocation=StrDatabase+".dbo."+StrRptTableName;
- DTable.Location=StrLocation;
- }
- }
- }
- #endregion
- //將報表賦給報表瀏覽器
- ReportViewer.ReportSource=Rpt;
- //ReportViewer.RefreshReport();
- }
- catch(Exception ee)
- {
- string StrMsg=ee.Source+ee.Message;
- System.Windows.Forms.MessageBox.Show(StrMsg);
- }
- }
C#調用水晶報表的基本內容就向你介紹到這里,希望那個對你了解和學習C#調用水晶報表有所幫助。
【編輯推薦】
責任編輯:仲衡
來源:
CSDN