我在数据库中有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;
答案 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传递。