点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我有一个Web应用程序(带有Webform的.NET MVC,用于显示Crystal Report Viewer)。 我在Visual Studio中创建了一个数据集。 我正在尝试将此数据集连接到具有来自ODBC数据库的字段的现有Crystal Report。 如何配置报告以连接到两个数据源? 我能够将每个报表连接到不同的报表,但不能连接在一起。 谢谢!
//连接到数据集 受保护的void Page_Load(对象发送者,EventArgs e) { ReportDocument报告=新的ReportDocument(); 字符串reportPath2 = Server.MapPath(" CrystalReport2.rpt"); DataSet ds = new DataSet(" Customers"); DataTable表=新的DataTable("客户"); table.Columns.Add(" Name",typeof(System.String)); table.Columns.Add(" Age",typeof(System.Int32)); DataRow row1 = table.NewRow(); row1 [" Name"] =" John Doe"; row1 [" Age"] = 45; table.Rows.Add(row1); ds.Tables.Add(table); report.Load(reportPath2); report.SetDataSource(ds); CrystalReportViewer1.ReportSource =报告; } //**************************************************** ************************************** //连接到ODBC 受保护的void Page_Init(对象发送者,EventArgs e) { 字符串reportPath = Server.MapPath(" CrystalReport2.rpt"); //首次加载报告 if(!IsPostBack ||(ReportDocument)Session [" Report"] == null) { report = new ReportDocument(); report.Load(" reportPath"); ConfigureCrystalReport(report); Session.Add(" Report",report); } //连接Crystal Report Viewer以在会话中显示已加载的报告 CrystalReportViewer1.ReportSource =(ReportDocument)Session [" Report"]; //防止在报表打开时提示参数 CrystalReportViewer1.EnableParameterPrompt = false; } 公共无效ConfigureCrystalReport(ReportDocument报告) { ConnectionInfo connectionInfo =新的ConnectionInfo(); AssignConnection(connectionInfo); //将连接分配给主报表中的所有表 foreach(report.Database.Tables中的CrystalDecisions.CrystalReports.Engine.Table表) { AssignTableConnection(table,connectionInfo); } //循环遍历所有节及其对象,以对子报表执行相同的操作 foreach(report.ReportDefinition.Sections中的" CrystalDecisions.CrystalReports.Engine.Section"部分) { //在每个部分中,我们需要遍历所有报告对象 foreach(CrystalDecisions.CrystalReports.Engine.ReportObject reportObject在section.ReportObjects中) { 如果(reportObject.Kind == ReportObjectKind.SubreportObject) { SubreportObject subReport =(SubreportObject)reportObject; ReportDocument subDocument = subReport.OpenSubreport(subReport.SubreportName); foreach(subDocument.Database.Tables中的CrystalDecisions.CrystalReports.Engine.Table表) { AssignTableConnection(table,connectionInfo); } } } } } 公共静态void AssignConnection(ConnectionInfo连接) { //自动登录数据库而不会提示用户 connection.UserID =" USER_ID"; connection.Password =" _PASSWORD"; connection.ServerName =" SERVER_NAME"; } 公共静态无效AssignTableConnection(CrystalDecisions.CrystalReports.Engine.Table表,ConnectionInfo连接) { //缓存登录信息块 TableLogOnInfo logOnInfo = table.LogOnInfo; //设置连接 logOnInfo.ConnectionInfo =连接; //将连接应用于表! table.ApplyLogOnInfo(logOnInfo); }
不支持,不添加子报告,并为其设置第二个数据源。 这就是我们为第二个数据源提供子报表的原因。
首先在Designer中尝试它,然后在代码中进行相同的操作。
感谢您的帮助。 我花了几天时间试图弄清楚这一点,您却为我指明了正确的方向。
我在Designer中将子报表的数据源设置为DataSet进行了尝试,但是我看不到详细填充的数据。 我的数据集数据是从应用程序动态创建的。 我应该在哪里放置将子报表连接到数据源的代码,我应该在哪里放置创建数据以填充数据的代码? 你有示例代码吗? 谢谢。
编辑:解决了此问题。 请参阅 https://answers.sap.com/questions/ 12710107/passing-parameters-to-subreport-1.html 获取代码。
下载WIKI链接到Parameter test应用,它具有用于设置main和 子报表:
https: //wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports%2C+Developer+for+Visual+Studio+Downloads
一周热门 更多>