如何重命名子报表的对象名?

2020-09-13 14:19发布

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

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


我们正在尝试使用C#设置子报表的"对象名称"。 Name属性显示为get; 设置并接受我们设置的字符串值。 但是,当报告使用C#代码保存并在设计器中签入时,它仍然显示" Subreport1"。

下面的代码示例运行正常,但是使用Crystal Reports Designer打开报表时,它显示对象名称仍为" Subreport1":

 CrystalDecisions.CrystalReports.Engine.ReportDocument Mainrd;
 字符串RPTPath = @" C:\ Main.rpt";
 Mainrd.Load(RPTPath);
 ReportObjectController rptObjCtrl = Mainrd.ReportClientDocument.ReportDefController.ReportObjectController;
 rptObjCtrl.GetReportObjectsByKind(CrReportObjectKindEnum.crReportObjectKindSubreport)[0] .Name =" TestSub";
 Mainrd.SaveAs(RPTPath);
 Mainrd.Close();
 

我们正在使用:

运行时:" 13.0.20.2399"

Visual Studio 2017

我们在这里做错了吗? 请告诉我们。 感谢您的帮助!

致谢

尼基尔

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

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


我们正在尝试使用C#设置子报表的"对象名称"。 Name属性显示为get; 设置并接受我们设置的字符串值。 但是,当报告使用C#代码保存并在设计器中签入时,它仍然显示" Subreport1"。

下面的代码示例运行正常,但是使用Crystal Reports Designer打开报表时,它显示对象名称仍为" Subreport1":

 CrystalDecisions.CrystalReports.Engine.ReportDocument Mainrd;
 字符串RPTPath = @" C:\ Main.rpt";
 Mainrd.Load(RPTPath);
 ReportObjectController rptObjCtrl = Mainrd.ReportClientDocument.ReportDefController.ReportObjectController;
 rptObjCtrl.GetReportObjectsByKind(CrReportObjectKindEnum.crReportObjectKindSubreport)[0] .Name =" TestSub";
 Mainrd.SaveAs(RPTPath);
 Mainrd.Close();
 

我们正在使用:

运行时:" 13.0.20.2399"

Visual Studio 2017

我们在这里做错了吗? 请告诉我们。 感谢您的帮助!

致谢

尼基尔

付费偷看设置
发送
3条回答
派大星 ヾ
1楼 · 2020-09-13 14:32.采纳回答

类似htis的东西:

//添加一个子报表
 CrystalDecisions.ReportAppServer.ReportDefModel.Section rasSection;
 CrystalDecisions.ReportAppServer.Controllers.SubreportClientDocument MyNewSub; //= new SubreportClientDocument();

 rasSection = rptClientDoc.ReportDefController.ReportDefinition.ReportHeaderArea.Sections [0];

//添加新的子报表(而不是导入)时,需要将ReportURL属性留空
 MyNewSub = rptClientDoc.SubreportController.ImportSubreport("世界销售报告"," d:\\ atest \\ soda \\ impsub.rpt",rasSection);
 MyNewSub.DatabaseController.LogonEx(" YourServer"," xtreme"," sa"," Password");


//更改现有的子报表
 CrystalDecisions.CrystalReports.Engine.ReportObjects crReportObjects;

//将crSections对象设置为当前报表的各节
 CrystalDecisions.CrystalReports.Engine.Sections crSections = rpt.ReportDefinition.Sections;

 如果(resultField.ToString()=="世界销售报告.rpt")
 {
    //循环遍历所有部分以查找所有报告对象
     foreach(CrystalDecisions.CrystalReports.Engine.Section crSection in crSections)
     {
         crReportObjects = crSection.ReportObjects;
        //循环遍历所有报表对象以查找所有子报表
         foreach(crReportObjects中的CrystalDecisions.CrystalReports.Engine.ReportObject crReportObject)
         {
             如果(crReportObject.Kind == ReportObjectKind.SubreportObject)
             {
                 CrystalDecisions.ReportAppServer.ReportDefModel.Section rasSection;
                 rasSection = rptClientDoc.ReportDefController.ReportDefinition.FindSectionByName(crSection.Name);
                 CrystalDecisions.ReportAppServer.Controllers.SubreportClientDocument MyNewSub;
                 MyNewSub = rptClientDoc.SubreportController.GetSubreport(resultField.ToString());

                 CrystalDecisions.ReportAppServer.ReportDefModel.SubreportObject objSubreport = rptClientDoc.ReportDefController.ReportObjectController.GetAllReportObjects()[crReportObject.Name]作为CrystalDecisions.ReportAppServer.ReportDefModel.SubreportObject;
                 CrystalDecisions.ReportAppServer.ReportDefModel.SubreportObject objSubreport2 =(CrystalDecisions.ReportAppServer.ReportDefModel.SubreportObject)objSubreport.Clone(true);
                 rptClientDoc.ReportDefController.ReportObjectController.Remove(objSubreport);
                 CrystalDecisions.ReportAppServer.ReportDefModel.SubreportLinks mySubLinks = rptClientDoc.SubreportController.GetSubreportLinks(objSubreport2.SubreportName.ToString());
                 mySubLinks.RemoveAll();

                 objSubreport2.Left = 10;
                 objSubreport2.Height = 10;
                 objSubreport2.Width = 10;
                 objSubreport2.Name =" sub1";
                 objSubreport2.SubreportName =" sub1";
                //rptClientDoc.ReportDefController.ReportObjectController.Modify(rptClientDoc.ReportDefController.ReportObjectController.GetAllReportObjects()[crReportObject.Name] as CrystalDecisions.ReportAppServer.ReportDefModel.SubreportObject,objSubreport2);
                 rptClientDoc.ReportDefController.ReportObjectController.Add(objSubreport2,rasSection,-1);
             }
         }
     }
 } 
zhangjiyang1323
2楼-- · 2020-09-13 14:33

嗨唐

您能帮我提供样品吗?

致谢

Nikhil

d56caomao
3楼-- · 2020-09-13 14:32

要能够正常更改名称,您将使用RAS,这是一个只读属性:

字符串名称{get; }
CrystalDecisions.ReportAppServer.Controllers.ISCRSubreportClientDocument的成员

您需要做的就是克隆子报表并更改其名称,然后删除旧的子报表并将克隆的对象添加回报表中。

一周热门 更多>