Добавить TextObject в ReportDocument в C#

Я использую Visual Studio 2010 SAP Crystal Reports.
Я настраиваю форму с помощью средства просмотра отчетов и загружаю специально разработанный файл rpt в источник средства просмотра.
Работает нормально.
Я даже могу изменить свои специально разработанные поля файла rpt из кода следующим образом:

ReportDocument reportDocument = new ReportDocument();

string filePath = AppDomain.CurrentDomain.BaseDirectory; 

filePath = filePath.Replace("bin\\Debug\\", "MyReportClass.rpt");

reportDocument.Load(filePath);

CrystalDecisions.CrystalReports.Engine.TextObject MyText1= ((CrystalDecisions.CrystalReports.Engine.TextObject)reportDocument.ReportDefinition.Sections[3].ReportObjects["MyText1"]);

MyText1.Text = "Test Work";

MyReportViewer.ReportSource = reportDocument;

Вопрос: Как добавить новый TextObject в ReportDocument в коде позади?

Я пытался:

reportDocument.Sections(2).AddTextObject(..

но этот метод не существует

1 ответ

Решение

Текстовый объект Crystal Reports не так прост. Сначала необходимо создать ParagraphTextElement и поместить его в объект ParagraphElements, в объект Paragraph в объекте Paragraphs и назначить этот объект свойству TextObject.Paragraphs.

Затем вам нужно найти раздел отчета в ReportDefinition для добавления, а затем добавить этот объект в раздел через ReportDefinition.

Хотя достаточно объяснить, вот мои заявления об использовании:

#region Using

using System;
using System.Windows;

using CrystalDecisions.ReportAppServer.Controllers;
using CrystalDecisions.ReportAppServer.ReportDefModel;

#endregion

И вот код, с которым я работал:

var reportDocument = new CrystalDecisions.CrystalReports.Engine.ReportDocument();

var filePath = AppDomain.CurrentDomain.BaseDirectory;
filePath = filePath.Replace("bin\\Debug\\", "MyReport.rpt");
reportDocument.Load(filePath);

ReportDefController2 reportDefinitionController = reportDocument.ReportClientDocument.ReportDefController;

ISCRParagraphTextElement paraTextElementClass = new ParagraphTextElement { Text = "Text Work", Kind = CrParagraphElementKindEnum.crParagraphElementKindText };

ParagraphElements paragraphElements = new ParagraphElements();
paragraphElements.Add(paraTextElementClass);

Paragraph paragraph = new Paragraph();
paragraph.ParagraphElements = paragraphElements;

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

TextObject newTextObject = new TextObject();
newTextObject.Paragraphs = paragraphs;

var detailSection = reportDefinitionController.ReportDefinition.DetailArea.Sections[0];
reportDefinitionController.ReportObjectController.Add(newTextObject, detailSection, 0);

// MyReportViewer.ReportSource = reportDocument;
this.crystalReportsViewer.ViewerCore.ReportSource = reportDocument;

Последняя строка отличается, потому что я использую приложение WPF для тестирования. Надеюсь, это поможет!

Другие вопросы по тегам