如何在没有 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 传递。
我在数据库中有 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 传递。