Добавить 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 для тестирования. Надеюсь, это поможет!