2

我有一个LocalReport对象,我用所有适当的信息填充。我使用相同的报表对象导出为不同的格式。我的用户可以选择 Image、Excel、Word、Pdf 等,我使用相同的报表对象来促进这些请求。

我的问题是有时他们可能想查看它。我知道我可以打开导出的类型,但这不是我想要发生的。我想在ReportViewer. 我知道我可以设置ReportViewer.LocalReports属性并获得我正在寻找的东西,但我已经在我的 Report 对象中设置了所有内容。

所以问题是:我该如何做以下不正确且无法完成的事情?

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

4 回答 4

2

您可以尝试更改当前正在执行的操作的顺序。

  1. 将 ReportViewer 添加到表单。(我不确定您为什么要在代码中创建 ReportViewer。我相信您不会将其动态添加到表单的控件中。)

  2. 在 ReportViewer.LocalReport 对象中设置所有报告信息。无需像在第一行代码中那样创建它。

  3. 调用 ReportViewer.RefreshReport() 方法在表单上呈现报表。

PS:如果您已经有一个 LocalReport 对象,则必须将其属性分配给 ReportViewer 上的报告对象。

于 2012-02-09T21:35:42.720 回答
2

和你一样,我希望能够在 ReportViewer 中显示 LocalReport。

这是我如何实现这一目标的:

Param_MyLocalReport是 [with .Render] 运行良好的 LocalReport。 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...
}
于 2014-06-09T17:50:39.497 回答
0

您可以在多种处理模式下处理报表。以下代码显示处理模式为本地。

_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);

我希望上面的代码示例对您有所帮助。

于 2012-02-21T17:38:41.367 回答
0

您可能可以使用反射在 ReportViewer 上设置 LocalReport 来侥幸成功,但请注意这可能会导致问题。我现在正在一个项目上做这个,它似乎运作良好。在这里查看我的答案:https ://stackoverflow.com/a/14329386/285874

于 2013-01-16T18:26:38.947 回答