创建 Telerik 报告列表对象

Create Telerik Reporting list object

刚开始使用 Telerik Report Designer,喜欢使用绑定到列表对象的详细信息部分创建 PDF。我创建了一个人员列表对象并添加了名称和 phone 扩展名。

I dont see how to bound the list to the detail section and call the design file.

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);
            }

详细信息部分不能绑定到数据本身 - 它使用来自报表数据源的数据。上面的代码不会生成报表,因为它只是将列表中的数据绑定到报表参数,而不是报表本身。该代码还使用 TypeReportSource,但未设置其 TypeName,因此 reportProcessor 实例可能会抛出异常。我没有安装 Telerik Reporting 来提供经过测试的解决方案,但基本上你需要这样做:

  • 将两个文本框添加到报表的详细信息部分并设置它们 “=Fields.Id”和“=Fields.Name”的表达式(假设 Person class 具有这些属性)。
  • 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 保存到您选择的某个路径。 该方法显示在 How to: Bind to a BusinessObject 的 Reporting 文档中,在该示例中,报告源被传递给查看器,而不是传递给 reportProcessor,但想法是相同的。