ReportViewer 在本地工作,不在服务器中工作

ReportViewer working locally, not working in server

<rsweb:ReportViewer ID="ReportViewer1" runat="server" SizeToReportContent="True">
    <LocalReport ReportPath="/Activity/Reports/Report.rdlc">
        <DataSources>
            <rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="dsActivity" />
            <rsweb:ReportDataSource DataSourceId="ObjectDataSource2" Name="dsPoints" />
            <rsweb:ReportDataSource DataSourceId="ObjectDataSource3" Name="dsEnterprise" />
        </DataSources>
    </LocalReport>
</rsweb:ReportViewer>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="ListAct" TypeName="App.BL.Activity"></asp:ObjectDataSource>
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server" SelectMethod="ListPts" TypeName="App.BL.Points"></asp:ObjectDataSource>
<asp:ObjectDataSource ID="ObjectDataSource3" runat="server" SelectMethod="ListEtp" TypeName="App.BL.Enterprise"></asp:ObjectDataSource>

此代码在调试时有效,但当我将其发布到服务器时,出现以下错误消息:

处理本地报表时出错。
尚未指定报告 'Report' 的报告定义
找不到文件 'E:\Groups\Tech\appWebHlg\Report.rdlc'。

ReportPath 以某种方式无法到达 Report.rdlc,我如何在服务器端找到它?我可以使用任何绝对路径吗?如何让 ReportViewer 找到报告?

您需要更改服务器的 ReportPath。 ReportPath 需要是服务器硬盘驱动器上的绝对路径。

大多数人发现在执行报表时最好在代码中设置报表路径。例如 (c#)

if (ReportViewer1.LocalReport.ReportPath.BeginsWith("/")) {
    string realpath = Server.MapPath(ReportViewer1.LocalReport.ReportPath);
    ReportViewer1.LocalReport.ReportPath = realpath;
}
ReportViewer1.LocalReport.Refresh();