C# 如何将SSRS报告动态加载到报告查看器中并包含数据源/数据集?

C# 如何将SSRS报告动态加载到报告查看器中并包含数据源/数据集?,c#,asp.net,reporting-services,rdl,C#,Asp.net,Reporting Services,Rdl,以下是场景:我有许多不同的报告文件(*.rdl),用户可以从web界面中选择一个。这将依次加载报表查看器控件(作为ASPX控件) 我的*.rdl文件在定义中同时包含数据源和数据集(我在记事本中检查了XML以确保)。数据源是一个Oracle存储过程。如果我在ReportBuilder3中运行报告,它运行得很好 我不明白的是如何在运行时将报表文件加载到报表查看器中,并让它自动使用报表定义中定义的数据源和数据集 try { Viewer.LocalReport.ReportPath = myL

以下是场景:我有许多不同的报告文件(*.rdl),用户可以从web界面中选择一个。这将依次加载报表查看器控件(作为ASPX控件)

我的*.rdl文件在定义中同时包含数据源和数据集(我在记事本中检查了XML以确保)。数据源是一个Oracle存储过程。如果我在ReportBuilder3中运行报告,它运行得很好

我不明白的是如何在运行时将报表文件加载到报表查看器中,并让它自动使用报表定义中定义的数据源和数据集

try
{
    Viewer.LocalReport.ReportPath = myLocalRDLPath; // Exists and is readable
    var reader = new StringReader(File.ReadAllText(myLocalRDLPath));
    Viewer.LocalReport.LoadReportDefinition(reader);
}
catch(Exception ex)
{
    throw new Exception("Unable to open report definition file from server.", ex);
}

if (Viewer.LocalReport.DataSources.Count > 0)
{
    // Never hits, DataSources is always empty, but
    // a Data Source and a Dataset exist in the .rdl file.
}

如果您使用的是.RDL文件,则需要使用
Viewer.ServerReport
。它将使用报表定义中的数据源,无需显式设置数据源

Viewer.LocalReport
用于.RDLC文件,其中设置数据源是在代码中手动设置的,如代码示例所示

是的,我明白了(见我的评论),现在我面临一个新问题,所以我发布了一个新问题: