Создать объект списка отчетов Telerik - PullRequest
0 голосов
/ 01 октября 2019

Только что начал использовать Telerik Report Designer и хотел создать PDF-файл, используя раздел сведений, связанный с объектом списка. Я создал объект списка людей и добавил имя и добавочный номер телефона.

Я не понимаю, как связать список с подробным разделом и вызвать файл дизайна.

List<Person> people = new List<Person>();
            people.Add(new Person(501, "Joe"));
            people.Add(new Person(302, "Bill"));
            people.Add(new Person(263, "Tom"));
            people.Add(new Person(244, "Mark"));
            people.Add(new Person(567, "Jim"));
            people.Add(new Person(662, "Jen"));

            Telerik.Reporting.ReportParameter reportParameter1 = new Telerik.Reporting.ReportParameter();
            reportParameter1.AvailableValues.DataSource = people;
            var reportProcessor = new Telerik.Reporting.Processing.ReportProcessor();
            var reportSource = new Telerik.Reporting.TypeReportSource();
            string documentName = "NCCN Telephone List";


            var deviceInfo = new System.Collections.Hashtable();

            deviceInfo["OutputFormat"] = "PDF";


            Telerik.Reporting.Processing.RenderingResult result = reportProcessor.RenderReport("PDF", reportSource, deviceInfo);

            string fileName = result.DocumentName + "." + result.Extension;
            string path = System.IO.Path.GetTempPath();
            string filePath = System.IO.Path.Combine(path, fileName);

            using (System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Create))
            {
                fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
            }

1 Ответ

1 голос
/ 19 октября 2019

Детальный раздел не может быть привязан к самим данным - он использует данные из источника данных отчета. Приведенный выше код не будет генерировать отчет, поскольку он просто связывает данные в списке с параметром отчета, а не с самим отчетом. Код также использует TypeReportSource , но не устанавливает его TypeName, поэтому экземпляр reportProcessor, скорее всего, выдаст исключение. У меня не установлена ​​Telerik Reporting, чтобы предоставить проверенное решение, но в основном вам нужно сделать это:

  • Добавьте два текстовых поля в подробный раздел отчета и установите для них выражение "= Fields.Id"и "= Fields.Name" (при условии, что класс Person обладает этими свойствами).
  • Список экземпляров Person должен быть назначен как источник данных отчета. Поскольку вы делаете это программно, вам нужно использовать InstanceDataSource , и код должен выглядеть следующим образом:

    var report = new MyReport();
    report.DataSource = people;
    var irs = new InstanceReportSource(){ ReportDocument = report };
    var reportProcessor = new Telerik.Reporting.Processing.ReportProcessor();
    var result = reportProcessor.RenderReport("PDF", irs, null);
    
  • Сохраните result.DocumentBytes по некоторому путина ваш выбор. Подход показан в документации по отчетности в Как: привязать к BusinessObject , в этом примере источник отчета передается в средство просмотра, а не в reportProcessor, но идея та же.

...