2017-02-21 10 views
1

Я использую Wpf для просмотра некоторых отчетов с помощью Report Viewer .. Я разработал отчет, используя sql report builder 'ReportByTopic.rdl', добавив его в решение. DataSet внутри файла rdl под названием «DataSet1» и есть три параметра @TopicId, @ SDATE, @EDate испытанных запрос и он работает нормальноЗагрузка отчетов Microsoft надлежащим образом

Я пытаюсь загрузить filterd данные в ReportViewer, но никаких данных не рассматриваются

и вот код

private void reportViewer_load() 
{ 
    ReportParameter[] Params = new ReportParameters[3]; 
    Params[0] = new ReportParameter("TopicId", "4"); 
    Params[1] = new ReportParameter("SDate", "2009-01-01"); 
    Params[2] = new ReportParameter("EDate", "2017-01-01"); 

    ReportDataSource rds = new ReportDataSource(); 
    rds.Name = "DataSet1"; 

    reportViewer.LocalReport.ReportPath = "Reports\ReportByTopic.rdl"; 
    reportViewer.LocalReport.DataSource.Add(rds) 
    reportViewer.LocalReport.SetParameters(Params); 
    reportViewer.Refresh(); 
} 

так, где я ошибся

UPDATE

Исходя из ответов, которые я сделал некоторые изменения в коде выше. Сначала я использовал метод GetData, который возвращает данные всех необходимых мне данных, используя тот же запрос, который я использовал для создания файла rdl. Отредактированного код

private void reportViewer_load() 
{ 
    ReportParameter[] Params = new ReportParameters[3]; 
    Params[0] = new ReportParameter("TopicId", "4"); 
    Params[1] = new ReportParameter("SDate", "2009-01-01"); 
    Params[2] = new ReportParameter("EDate", "2017-01-01"); 

    ReportDataSource rds = new ReportDataSource("DataSet1", GetData()); 


    reportViewer.LocalReport.ReportPath = "Reports\ReportByTopic.rdl"; 
    reportViewer.LocalReport.DataSource.Add(rds) 
    reportViewer.LocalReport.SetParameters(Params); 
    reportViewer.Refresh(); 
} 

Объект DataTable получает правильно заполнен 900 строк, но все-таки ReportViewer не

+0

См. Обновление ответа на основе обновленного кода. –

ответ

1

Вы опущены, чтобы передать данные в отчет, при создании ReportDataSource передать имя DataSet и данные в свой конструктор:

IEnumerable data = GetFromDataBase(...); 
ReportDataSource rds = new ReportDataSource("DataSet1",data); 

reportViewer.LocalReport.ReportPath = "Reports\ReportByTopic.rdl"; 
reportViewer.LocalReport.DataSource.Add(rds) 

Посмотрите ReportDataSource конструктор для получения более подробной информации.

UPDATE:

С вашего обновления я обнаружить проблему. Вы ссылаетесь на Обновить метод управления базового класса, когда вы на самом деле хотите, чтобы вызвать RefreshReport. Они используются для двух разных вещей. Так что ваши последние четыре строки должна быть заменена следующим образом:

reportViewer.LocalReport.ReportPath = "Reports\ReportByTopic.rdl"; 
reportViewer.LocalReport.DataSources.Clear() //Added line 
reportViewer.LocalReport.DataSource.Add(rds) 
reportViewer.LocalReport.SetParameters(Params); 
reportViewer.RefreshReport(); //Replaced line 

Обратите внимание, что я первый вызов Clear метода перед установкой источника данных. Это полезно, если вы хотите перезагрузить/обновить отчет, не закрывая его.

+0

Я задал запрос в наборе данных файла rdl .. не получает ли он данные автоматически с использованием этого запроса? –

+0

Вы указали только схему для отчета, но фактические данные должны быть явно указаны. –

+0

ОК спасибо за ответ .. но я был бы признателен за немного больше помощи .. Если данные извлекаются из разных таблиц со многими типами и не могут быть в коллекции .. Каков правильный объект, я помещаю эти данные в –

Смежные вопросы