我希望使用存储在ViewData中的过滤器生成包含来自数据库的数据的报告。
我的问题是如何将报表的ViewData值作为参数来显示一些数据。
控制器:
var Soc = (string)TempData["Societe"];
XtraReport report = new Training.UI.Web.Reporting.Etat1();
report.DataSource = from p in db.TEntreprises
where p.EntNom == Soc
select p;
report.Parameters.Add(new DevExpress.XtraReports.Parameters.Parameter() { Name = "EntNom", Type = typeof(String), Value = Soc, Description = "NomEntreprise" });
ViewData["Report"] = report;
return PartialView("DocumentViewerPartial");视图:
@Html.DevExpress().DocumentViewer(settings =>
{
settings.Name = "documentViewer1";
settings.StylesSplitter.SidePaneWidth = 340;
settings.Report = (Training.UI.Web.Reporting.Etat1) ViewData["Report"];
settings.CallbackRouteValues = new { Controller = "Etat1", Action = "DocumentViewerPartial" };
settings.ExportRouteValues = new { Controller = "Etat1", Action = "ExportDocumentViewer" };
}).GetHtml()而且我在XtraReport中没有数据
发布于 2022-02-23 13:08:40
若要将值应用于报表,请创建包含报表名称和提交值的字符串,并将此字符串传递给查看器的OpenReport方法。
下面的示例演示如何执行以下操作:
使用文档查看器和按钮创建页面。创建一个具有报表名称和预定义参数值的字符串,并在单击按钮时将该字符串传递给查看器的OpenReport方法。
Viewer.cshtml
<script type="text/javascript">
function OnClick() {
var reportName = "XtraReport1";
var paramName = "strParam";
var paramValue = "42";
var reportUrl = reportName + '?' + paramName + '=' + paramValue;
WebDocumentViewer1.OpenReport(reportUrl);
}
</script>
@Html.DevExpress().Button(settings => {
settings.Name = "dxOpenButton";
settings.Text = "Submit parameter";
settings.ClientSideEvents.Click = "OnClick";
}).GetHtml()
@Html.DevExpress().WebDocumentViewer(settings => {
settings.Name = "WebDocumentViewer1";
}).Bind("XtraReport1").GetHtml()调用查看器的OpenReport方法时,报表引擎将执行报表名称解析服务。此服务创建一个报表实例并将其返回给查看器。实现此服务以将参数值应用于报表。来自OpenReport方法的string参数被传递给返回报表实例的服务的方法。在此方法中,执行以下操作:
解析字符串参数以提取报表名称和参数值。创建报表实例并将参数值应用于该实例。按报表参数集合中的名称引用每个参数,并将该值分配给参数的value属性。
如果希望自定义UI元素是提交参数值的唯一方法,请隐藏参数面板。为此,禁用所有报表参数的可见属性。如果希望用户同时从面板和自定义UI元素提交参数值,请禁用报表的RequestParameters属性。
返回报表实例。从DevExpress模板库创建Web报表应用程序时,可以将报表存储服务添加到应用程序中。此服务将用作应用程序中的报表名称解析服务。为此,按以下方式实现服务的GetData方法:
CustomReportStorageWebExtenstion.CS
public override byte[] GetData(string url) {
try {
// Parse the string with the report name and parameter values.
string[] parts = url.Split('?');
string reportName = parts[0];
string parametersQueryString = parts.Length > 1 ? parts[1] : String.Empty;
// Create a report instance.
XtraReport report = null;
if (Directory.EnumerateFiles(reportDirectory).
Select(Path.GetFileNameWithoutExtension).Contains(reportName)) {
byte[] reportBytes = File.ReadAllBytes(Path.Combine(reportDirectory, reportName + FileExtension));
using (MemoryStream ms = new MemoryStream(reportBytes))
report = XtraReport.FromStream(ms);
}
if (report != null) {
// Apply the parameter values to the report.
var parameters = HttpUtility.ParseQueryString(parametersQueryString);
foreach (string parameterName in parameters.AllKeys) {
report.Parameters[parameterName].Value = Convert.ChangeType(
parameters.Get(parameterName), report.Parameters[parameterName].Type);
}
// Disable the Visible property for all report parameters
// to hide the Parameters Panel in the viewer.
foreach (var parameter in report.Parameters) {
parameter.Visible = false;
}
// If you do not hide the panel, disable the report's RequestParameters property.
// report.RequestParameters = false;
using (MemoryStream ms = new MemoryStream()) {
report.SaveLayoutToXml(ms);
return ms.ToArray();
}
}
} catch (Exception) {
// ...
}若要将URL查询字符串中的参数值应用于报表,请按以下方式实现查看器的操作方法:
创建报表实例并将参数值应用于该实例。按报表参数集合中的名称引用每个参数,并将该值分配给参数的value属性。
如果希望URL的查询字符串是提交参数值的唯一方法,请隐藏参数面板。为此,禁用所有报表参数的可见属性。如果希望用户同时从面板和URL的查询字符串提交参数值,请禁用报表的RequestParameters属性。
返回报表视图。
下面的示例演示如何实现查看器的操作方法,以应用以下URL的查询字符串中的参数值:https://localhost:5001/Home/Viewer?intParam=42。
HomeController.cs
public ActionResult Viewer(int? intParam) {
var report = new XtraReport1();
report.Parameters["intParam"].Value = intParam;
report.Parameters["intParam"].Visible = false;
return View(report);
}https://stackoverflow.com/questions/31562537
复制相似问题