VS2010 RDLC C #.Как я могу установить объект LocalReport для ReportViewer? - PullRequest
1 голос
/ 08 февраля 2012

У меня есть LocalReport объект, который я заполняю всей соответствующей информацией.Я использую этот же объект отчета для экспорта в разные форматы.Мои пользователи могут выбрать «Изображение», «Excel», «Word», «PDF» и т. Д., И я использую один и тот же объект отчета, чтобы выполнить этот запрос.

Моя проблема в том, что иногда они могут захотеть его просмотреть.Я знаю, что могу открыть экспортированный тип, но это не то, чего я хочу.Я хочу просмотреть его в ReportViewer.Я знаю, что могу установить ReportViewer.LocalReports свойств и получить то, что ищу, но я уже настроил все в своем объекте отчета.

Итак, вопрос: Как мне выполнить следующее, котороеневерно и не может быть сделано?

LocalReport _Report = new LocalReport();

//set all my report information

Microsoft.Reporting.WinForms.ReportViewer _rv = new Microsoft.Reporting.WinForms.ReportViewer();

//This is what I'm trying to do
 _rv.LocalReport = _Report;

Ответы [ 4 ]

2 голосов
/ 10 февраля 2012

Вы можете попробовать изменить порядок вещей, которые вы сейчас делаете.

  1. Добавьте ReportViewer в форму. (Я не уверен, почему вы создаете ReportViewer в коде. Я полагаю, что вы не собираетесь динамически добавлять его в элементы управления формы.)

  2. Установите всю информацию вашего отчета в объекте ReportViewer.LocalReport. Нет необходимости создавать его, как вы сделали это в первой строке кода.

  3. Вызовите метод ReportViewer.RefreshReport () для отображения отчета в форме.

PS: Если у вас уже есть объект LocalReport, вам придется присвоить свойства из этого объекта отчета в ReportViewer.

1 голос
/ 09 июня 2014

Как и вы, я хотел иметь возможность отображать LocalReport в ReportViewer.

Вот как я этого добился:

Param_MyLocalReport - это LocalReport, который работает хорошо [с .Render]. ReportViewer1 - это, например, ReportViewer, где я хочу показать свой отчет. Эта функция автоматическая, копирует источники данных и параметры.

        //****************************
        //assign report Path
        reportViewer1.LocalReport.ReportPath = param_MyLocalReport.ReportPath;
        //****************************

        //****************************
        //assign data-sources
        foreach (ReportDataSource MyDS in param_MyLocalReport.DataSources)
            reportViewer1.LocalReport.DataSources.Add(MyDS);
        //****************************

        //****************************
        //Assign parameters 

        //get a list of actual parameters in the report, with the actual assigned value
        ReportParameterInfoCollection MyOrigParams = param_MyLocalReport.GetParameters(); //I didn't find simpler way to fetch params...

        //create a List of parameter [to feed the reportViewer]
        List<ReportParameter> MyListOfPArams = new List<ReportParameter>();

        //for each params found through GetParameters(), add it to the List<> of params
        for (int i = 0; i < MyOrigParams.Count; i++)
            MyListOfPArams.Add(new ReportParameter(MyOrigParams[i].Name, MyOrigParams[i].Values[0]));

        //final assignation of the parameters
        reportViewer1.LocalReport.SetParameters(MyListOfPArams);
        //****************************


        //show the report
        reportViewer1.RefreshReport();

Как упоминал Эль-Ниньо, это можно использовать в качестве помощника. Что-то вроде:

 Private void Convert_LocalReport_To_ReportViewer(LocalReport Param_MyLocalReport, ReportViewer param_MyReportViewer)
{ 
...copy the same code here...
}
0 голосов
/ 16 января 2013

Возможно, вам удастся использовать рефлексию для установки LocalReport в ReportViewer, но имейте в виду, что это может вызвать проблемы.Я делаю это на проекте прямо сейчас, и, кажется, работает хорошо.Смотрите мой ответ здесь: https://stackoverflow.com/a/14329386/285874

0 голосов
/ 21 февраля 2012

Вы можете обработать отчет в более чем одном режиме обработки.Следующий код показывает, что режим обработки - Локальный.

_RptViewer.ProcessingMode=ProcessingMode.Local;  
// _RptViewer is the name of the Report Viewer Control added to your Page/Form.

LocalReport objRpt=_RptViewer.LocalReport;
objRpt.ReportPath=Server.MapPath("YourReportName.rdlc");

ReportDataSource rds=new ReportDataSource("DataSourceName",DataSourceObject);     
//"DataSourceName" can be the name of the DataSet you created during designing the Report; 
//and DataSourceObject can be a method that returns a data table or DataTable that is defined in your code above, or any valid object that provides data to the report.*

objRpt.DataSources.Clear();
objRpt.DataSources.Add(rds);

Надеюсь, приведенный выше пример кода поможет вам.

...