Я пытаюсь создать систему отчетности с использованием структуры отчетности Telerik. До сих пор я мог использовать конструктор vs для создания отчетов, но не смог получить привязанность к каким-либо динамическим данным.Как связать отчет с источником данных и отправить его в ReportViewer
Я делаю это в проекте ASP.NET MVC (не проект telerik MVC. Это имеет значение?).
я в настоящее время:
- Контроллер, который был создан автоматически при использовании мастера ReportViewer
- Отчет
- 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 знает, как отправить данные, которые были связаны при создании объекта отчета?