创建 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,但想法是相同的。
刚开始使用 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,但想法是相同的。