С# создать программно раздел заголовка страницы в кристаллическом отчете

я хочу отображать текст водяного знака в кристаллическом отчете всякий раз, когда я буду предварительно просматривать отчет. для этого я создал новый объект абзаца, объект нового поля (текстового поля), а затем вставил его в кристальный отчет программно с использованием С#,
ниже приведен код

CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument rptClientDoc1 = cryRpt.ReportClientDocument;

        ISCRParagraphTextElement paragraphTextElement = new ParagraphTextElementClass();
        paragraphTextElement.Text = "TESTING";

        paragraphTextElement.Kind = CrParagraphElementKindEnum.crParagraphElementKindText;

        ParagraphElements paragraphElements = new ParagraphElementsClass();
        paragraphElements.Add(paragraphTextElement);

        Paragraph paragraph = new ParagraphClass();
        paragraph.Alignment = CrAlignmentEnum.crAlignmentHorizontalCenter;
        paragraph.ParagraphElements = paragraphElements;

        Paragraphs paragraphs = new ParagraphsClass();
        paragraphs.Add(paragraph);

        ISCRTextObject textObject = new TextObjectClass();
        textObject.Paragraphs = paragraphs;
        textObject.FontColor.Font.Bold = true;
        textObject.FontColor.Font.Size = 48;
        textObject.FontColor.Font.Italic = true;
        textObject.FontColor.Color = uint.Parse(ColorTranslator.ToOle(Color.Gray).ToString());
        textObject.FontColor.Font.Charset = 30;
        textObject.Height = 8000;
        textObject.Top = this.Height;
        textObject.Left = 5000;
        textObject.Width = 1500;

        textObject.Format.TextRotationAngle = CrTextRotationAngleEnum.crRotationAngleRotate90;

        ReportDefController2 reportDef = rptClientDoc1.ReportDefController;

        ReportSectionController reportSectionController = rptClientDoc1.ReportDefController.ReportSectionController;

        CrystalDecisions.ReportAppServer.ReportDefModel.Section newsec;

        int index = reportDef.ReportDefinition.PageHeaderArea.Sections.Count;
        if (index > 0)
        {               
            newsec = reportDef.ReportDefinition.PageHeaderArea.Sections[index - 1];
        }
        else
        {
            index = 0;
            newsec = reportDef.ReportDefinition.PageHeaderArea.Sections[index];
        }
        reportDef.ReportDefinition.PageHeaderArea.Sections.Insert(index, newsec);

        CrystalDecisions.ReportAppServer.ReportDefModel.Section sectionToAddTo = reportDef.ReportDefinition.PageHeaderArea.Sections[index];

        CrystalDecisions.ReportAppServer.ReportDefModel.SectionFormat newSectionFormat = sectionToAddTo.Format;
        newSectionFormat.EnableKeepTogether = false;
        newSectionFormat.EnableSuppress = false;
        newSectionFormat.EnableUnderlaySection = true;
        reportSectionController.SetProperty(sectionToAddTo, CrReportSectionPropertyEnum.crReportSectionPropertyFormat, newSectionFormat);

        reportDef.ReportObjectController.Add(textObject, sectionToAddTo, 0);


здесь проблема в том, что новый раздел в PageHeader является копией предыдущего раздела в PageHeader, если я изменю новый раздел в свойствах PageHeader, он также изменится предыдущий раздел в PageHeader, пожалуйста, помогите мне, как решить эту проблему?


person Sharanamma Jk    schedule 17.12.2013    source источник


Ответы (1)


    int index = reportDef.ReportDefinition.PageHeaderArea.Sections.Count;
    if (index > 0)
    {               
        newsec = reportDef.ReportDefinition.PageHeaderArea.Sections[index - 1].Clone();
    }
    else
    {
        index = 0;
        newsec = reportDef.ReportDefinition.PageHeaderArea.Sections[index].Clone();
    }

Это создаст новую копию «предыдущего раздела», и все изменения в newsec не повлияют на предыдущий. раздел. В качестве альтернативы вы также можете проверить метод CopyTo().

person Vadim Levkovsky    schedule 18.03.2014