将参数传递给子报表

2020-09-07 08:27发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我已将数据加载到数据集中。 我使用来自ODBC数据库的主报表数据源建立了一个水晶报表,并使用数据集作为数据源建立了子报表。 我正在尝试将参数从主报表传递到子报表。 我将主报表的参数链接到子报表中的相应字段,并在select expert中添加了过滤器。我在parameterField.CurrentValues.Clear()上收到NullReferenceException,错误为"对象引用未设置为对象的实例"并且" parameterField为空" 这是我的代码:
私人ReportDocument mainReport;
         受保护的void Page_Init(对象发送者,EventArgs e)
         {
            //首次加载报告
             if(!IsPostBack ||(ReportDocument)Session [" Report"] == null)
             {
                 mainReport = new ReportDocument();
                 mainReport.Load(" C:\\ Users \\ userid \\ Desktop \\ application \\ application.Web \\ CrystalReport \\ Reports \\ CrystalReport1.rpt");

                //自动登录数据库而不会提示用户
                 CrystalReportHelper.ConfigureCrystalReport(mainReport);

                 DataSet ds1 =新的DataSet(" MovieDS");
                 DataTable表=新的DataTable(" MovieDS");
                 table.Columns.Add(" TITLE",typeof(System.String));
                 table.Columns.Add(" YEAR",typeof(System.Int32));

                 DataRow row1 = table.NewRow();
                 row1 [" TITLE"] =" title_of_movie";
                 row1 [" YEAR"] = 1992;

                 table.Rows.Add(row1);
                 ds1.Tables.Add(table);

                 mainReport.Subreports [0] .SetDataSource(ds1);

                //设置参数
                 SubreportSettingParameters_RD(mainReport," subReport"," TITLE_PARAM",值);

                //记住加载的报告
                 Session.Add(" Report",mainReport);
             }

            //连接Crystal Report Viewer以在会话中显示已加载的报告
             CrystalReportViewer1.ReportSource =(ReportDocument)Session [" Report"];

            /////防止在打开报表时提示参数
             CrystalReportViewer1.EnableParameterPrompt = false;
         }


         私人无效SubreportSettingParameters_RD(ReportDocument testReport,字符串subreportName,字符串parameterFieldName,字符串parameterValue)
         {
             ParameterDiscreteValue dv =新的ParameterDiscreteValue();
             dv.Value = parameterValue;
             ParameterFields parameterFields = testReport.ParameterFields;
             ParameterField parameterField = parameterFields [parameterFieldName,subreportName];
             parameterField.CurrentValues.Clear();
             parameterField.CurrentValues.Add(dv);
         }

 

我正在Visual Studio Professional 2017中使用Crystal Report。谢谢!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我已将数据加载到数据集中。 我使用来自ODBC数据库的主报表数据源建立了一个水晶报表,并使用数据集作为数据源建立了子报表。 我正在尝试将参数从主报表传递到子报表。 我将主报表的参数链接到子报表中的相应字段,并在select expert中添加了过滤器。我在parameterField.CurrentValues.Clear()上收到NullReferenceException,错误为"对象引用未设置为对象的实例"并且" parameterField为空" 这是我的代码:
私人ReportDocument mainReport;
         受保护的void Page_Init(对象发送者,EventArgs e)
         {
            //首次加载报告
             if(!IsPostBack ||(ReportDocument)Session [" Report"] == null)
             {
                 mainReport = new ReportDocument();
                 mainReport.Load(" C:\\ Users \\ userid \\ Desktop \\ application \\ application.Web \\ CrystalReport \\ Reports \\ CrystalReport1.rpt");

                //自动登录数据库而不会提示用户
                 CrystalReportHelper.ConfigureCrystalReport(mainReport);

                 DataSet ds1 =新的DataSet(" MovieDS");
                 DataTable表=新的DataTable(" MovieDS");
                 table.Columns.Add(" TITLE",typeof(System.String));
                 table.Columns.Add(" YEAR",typeof(System.Int32));

                 DataRow row1 = table.NewRow();
                 row1 [" TITLE"] =" title_of_movie";
                 row1 [" YEAR"] = 1992;

                 table.Rows.Add(row1);
                 ds1.Tables.Add(table);

                 mainReport.Subreports [0] .SetDataSource(ds1);

                //设置参数
                 SubreportSettingParameters_RD(mainReport," subReport"," TITLE_PARAM",值);

                //记住加载的报告
                 Session.Add(" Report",mainReport);
             }

            //连接Crystal Report Viewer以在会话中显示已加载的报告
             CrystalReportViewer1.ReportSource =(ReportDocument)Session [" Report"];

            /////防止在打开报表时提示参数
             CrystalReportViewer1.EnableParameterPrompt = false;
         }


         私人无效SubreportSettingParameters_RD(ReportDocument testReport,字符串subreportName,字符串parameterFieldName,字符串parameterValue)
         {
             ParameterDiscreteValue dv =新的ParameterDiscreteValue();
             dv.Value = parameterValue;
             ParameterFields parameterFields = testReport.ParameterFields;
             ParameterField parameterField = parameterFields [parameterFieldName,subreportName];
             parameterField.CurrentValues.Clear();
             parameterField.CurrentValues.Add(dv);
         }

 

我正在Visual Studio Professional 2017中使用Crystal Report。谢谢!

付费偷看设置
发送
2条回答
微wx笑
1楼 · 2020-09-07 09:20.采纳回答

嗨,翠,

没有子报表参数集合,它是主报表集合的全部一个集合。 如果将报告名称设置为空而不是子报告名称,则代码应该可以正常工作。

在下载页面上,我有一个参数测试应用程序可以为您提供帮助。

https: //wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports%2C+Developer+for+Visual+Studio+Downloads

Don

三十六小时_GS
2楼-- · 2020-09-07 09:18

这有效!

现在我遇到另一个问题:可选参数。 编辑:使用mainReport.ParameterFields [" PARAM_NAME"]。CurrentValues.IsNoValue = true;

解决了此问题

谢谢您的帮助,唐!

//原始:SubreportSettingParameters_RD(mainReport,subReport," param"," parama_value");
//更改为此
 SubreportSettingParameters_RD(mainReport,""," PARAMETER_NAME",值); 

一周热门 更多>