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

时间:2019-02-14 11:36:15

标签: c# jquery asp.net reportviewer syncfusion

我在数据库中有RDL内容。因此,基于reportID,我可以呈现数据库内容。 我不想在系统中添加物理文件,既然Reportviewer寻找reportpath怎么能做到这一点?

直接显示带有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;

1 个答案:

答案 0 :(得分:1)

是的,我们可以将FileStream作为FileStream而不是ReportPath传递给Syncfusion ReportViewer,从而满足您的要求。请在下面的控制器端找到该代码段

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传递。