2017-02-22 33 views
0

Я пытаюсь создать систему отчетности с использованием структуры отчетности Telerik. До сих пор я мог использовать конструктор vs для создания отчетов, но не смог получить привязанность к каким-либо динамическим данным.Как связать отчет с источником данных и отправить его в ReportViewer

Я делаю это в проекте ASP.NET MVC (не проект telerik MVC. Это имеет значение?).

я в настоящее время:

  1. Контроллер, который был создан автоматически при использовании мастера ReportViewer
  2. Отчет
  3. A Model Я хочу использовать для заполнения отчета

Здесь код на мой взгляд:

@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 связать данные с отчетом?

Если Reportviewer получает фактический отчет через API, как api знает, как отправить данные, которые были связаны при создании объекта отчета?

ответ

0

Я делаю это в проекте ASP.NET MVC (не проект telerik MVC. Это имеет значение?).

Нет, это не имеет значения. Проект telerik MVC просто выполняет некоторые из исходных настроек и ссылок DLL для вас.

Одна вещь, которая сразу же смутила меня, как я могу определить, какие данные получить?

Лучшие способы сделать это либо определить данные во время разработки и связать его с помощью проводника данных или источника данных мастера или, альтернативно, используя событие NeedDataSource отчета для создания данных с помощью некоторых других средств в время выполнения.

Ссылки:

Если у меня есть несколько элементов на отчет, я должен создать источник данных для каждого из них?

Это зависит от многих вещей ... Что вы подразумеваете под «элементом»? - большинству вещей НЕ нужен отдельный источник данных. Некоторые подзаголовки, возможно, лучше разработаны с использованием отдельных источников данных, но даже это не обязательно в большинстве случаев, если вы можете передать источник данных из родительского отчета в подзаголовок.

Ссылка: http://docs.telerik.com/reporting/data-items-binding-a-data-item-to-data#binding-to-data-from-the-parent-data-item

Что такое правильный способ MVC для привязки данных к отчету?

Либо связывание данных во время разработки с использованием проводника данных, либо с использованием ресурса NeedDataSource Rerport для генерации данных во время выполнения, как объяснялось выше. Любой вариант может поддерживать параметры, позволяющие вам создавать «динамические» данные для вашего отчета на основе входных переменных из средства просмотра отчетов.

Если Reportviewer получает фактический отчет через API, как api знает, чтобы отправить ему данные, которые были связаны при создании объекта отчета?

Ответчик за отчет несет ответственность за загрузку отчета. Отчет должен отвечать за выборку и привязку собственных данных.