如何在没有 reportpath 的情况下打开 syncfusion 报告查看器

How do I open syncfusion report viewer without reportpath

我在数据库中有 RDL 内容。因此,基于 reportID,我可以呈现数据库内容。 我不想在系统中添加物理文件,因为 Reportviewer 正在寻找报告路径如何实现这一点?

直接将 RDL 内容字符串显示给报表查看器

由于 API 是机密无法查看所需的覆盖方法。

aspx 页面:

隐藏代码:

string targetFolder = HttpContext.Current.Server.MapPath("~/") + @"Report Templates\ReportViewer\";
string reportPath = targetFolder + @"\" + reportDefID + ".rdl";

deDesign oDE = new deDesign();
deReportDefinition oDef = oDE.getReportDefinition(reportDefID);
string sXML = oDef.export();

Hashtable oProps = oDef.getProperties("REPORTNAME");
lblReportName.Text = oProps["REPORTNAME"].ToString();

File.WriteAllText(reportPath, sXML);
viewer.ReportPath = reportPath;

lblStatus.Text = string.IsNullOrEmpty(sXML) ? "No Data Found" : "";
dvReportViewer.Visible = string.IsNullOrEmpty(sXML) ? false : true;

是的,我们可以通过将 FileStream 传递给 Syncfusion ReportViewer 而不是 ReportPath 来实现您的要求。请在下面的控制器端找到处理的片段,

public class ReportApiController : ApiController, IReportController 
{ 
    public object PostReportAction(Dictionary<string, object> jsonResult) 
    { 
        return ReportHelper.ProcessReport(jsonResult, this); 
    } 

    [System.Web.Http.ActionName("GetResource")] 
    [AcceptVerbs("GET")] 
    public object GetResource(string key, string resourcetype, bool isPrint) 
    { 
        return ReportHelper.GetResource(key, resourcetype, isPrint); 
    } 

    public void OnInitReportOptions(ReportViewerOptions reportOption) 
    { 
        FileStream fs = new FileStream(HttpContext.Current.Server.MapPath("~/App_Data/GroupingAgg.rdl"), FileMode.Open, FileAccess.Read); 
        reportOption.ReportModel.Stream = fs; 
    } 

    public void OnReportLoaded(ReportViewerOptions reportOption) 
    { 

    } 
} 

请在下面找到有助于满足您的要求的示例参考,

http://www.syncfusion.com/downloads/support/directtrac/general/ze/ReportviewerSample141241572.zip

注意:在上面的示例中,我们已经将物理路径文件作为流读取并加载了。您可以根据需要修改示例,以将 xml 内容作为 FileStream 传递。