如何将报表绑定到DataSource并将其发送到ReportViewer

时间:2017-02-22 23:16:42

标签: asp.net asp.net-mvc telerik telerik-reporting

我正在尝试使用Telerik报告框架构建报告系统。到目前为止,我已经能够使用vs设计器来创建报告,但还没有设法附加到任何类型的动态数据。

我在ASP.NET MVC项目中这样做(不是telerik MVC项目。这有关系吗?)。

我目前有:

  1. 使用reportviewer向导时自动创建的控制器
  2. 报告
  3. 我想用于填充报告的模型
  4. 以下是我视图中的代码:

    @model Telerik.Reporting.ReportSource
    
    @(Html.TelerikReporting().ReportViewer()
            .Id("reportViewer1")
            .ServiceUrl(Url.Content("~/api/reports"))
            .ReportSource(model)
            .ViewMode(ViewMode.Interactive)
            .ScaleMode(ScaleMode.Specific)
            .Scale(1.0)
            .PersistSession(false)
            .PrintMode(PrintMode.AutoSelect)
    )
    

    让我感到困惑的一件事是如何定义要获取的数据?

    假设我有一个模型,我想用它来填充报告:

    public class ReportModel()
    {
        Dictionary<string, int> Graphdata;
    
        public ReportModel()
        {
             Graphdata = GetGraphData();
        }
    
        public Dictionary<string, int> GetGraphData()
        {
        ...
        }
    }
    

    因此,在Reports控制器中,我将创建一个新报告:

    var report = new Report1();
    

    现在我必须为报告创建数据源。这就是我被困的地方......

    报告的模型将包含报告中所有不同元素的多个列表,表格和词典。

    在文档中,他们这样做:

    // Creating and configuring the ObjectDataSource component:
    var objectDataSource = new Telerik.Reporting.ObjectDataSource();
    objectDataSource.DataSource = typeof(Products); // Specifying the business object type
    objectDataSource.DataMember = "GetProducts"; // Specifying the name of the data object method
    objectDataSource.CalculatedFields.Add(new Telerik.Reporting.CalculatedField("FullName", typeof(string), "=Fields.Name + ' ' + Fields.ProductNumber")); // Adding a sample calculated field.
    
    // Specify the parameters, their types and values
    objectDataSource.Parameters.Add(new Telerik.Reporting.ObjectDataSourceParameter("color", typeof(string), "Silver"));
    objectDataSource.Parameters.Add(new Telerik.Reporting.ObjectDataSourceParameter("productModelID", typeof(int), 23));
    

    这就是我迷路的地方。所以这是我的问题:

    如果报表上有多个元素,是否必须为每个元素创建一个数据源?

    将数据绑定到报表的正确MVC方法是什么?

    如果报告查看器通过API获取实际报告,api如何知道在创建报告对象时向其发送绑定的数据?

1 个答案:

答案 0 :(得分:0)

  

我在ASP.NET MVC项目中这样做(不是telerik MVC项目。   这有关系吗?)。

不,它应该没有区别。 telerik MVC项目只为您做了一些初始设置和dll参考。

  

让我感到困惑的一件事是如何定义哪些数据   要取?

执行此操作的最佳方法是在设计时定义数据并使用数据资源管理器或数据源向导进行绑定,或者使用报表的NeedDataSource事件在运行时通过其他方式构建数据。

参考文献:

  

如果报表上有多个元素,是否必须创建一个   每个人的数据源?

这取决于很多事情......你是什么意思&#34;元素&#34;? - 大多数事情不需要单独的数据源。某些子报表可能使用单独的数据源设计得更好,但如果您能够将数据源从父报表传递到子报表,则大多数情况下都不需要这样做。

参考:http://docs.telerik.com/reporting/data-items-binding-a-data-item-to-data#binding-to-data-from-the-parent-data-item

  

将数据绑定到报表的正确MVC方法是什么?

通过使用数据资源管理器在设计时绑定数据或使用Rerport的NeedDataSource在运行时生成数据,如上所述。任何一个选项都可以支持参数,以便您构建&#34; dynamic&#34;报告的数据基于报告查看器中的输入变量。

  

如果报告查看器通过API获取实际报告,api如何知道在创建报告对象时向其发送绑定的数据?

报告查看器负责加载报告。该报告应负责获取和绑定自己的数据。