首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从视图获取参数的ASP.NET MVC DevExpress XtraReport

从视图获取参数的ASP.NET MVC DevExpress XtraReport
EN

Stack Overflow用户
提问于 2015-07-22 12:02:19
回答 1查看 1.2K关注 0票数 0

我希望使用存储在ViewData中的过滤器生成包含来自数据库的数据的报告。

我的问题是如何将报表的ViewData值作为参数来显示一些数据。

控制器:

代码语言:javascript
复制
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");

视图:

代码语言:javascript
复制
@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中没有数据

EN

回答 1

Stack Overflow用户

发布于 2022-02-23 13:08:40

若要将值应用于报表,请创建包含报表名称和提交值的字符串,并将此字符串传递给查看器的OpenReport方法。

下面的示例演示如何执行以下操作:

使用文档查看器和按钮创建页面。创建一个具有报表名称和预定义参数值的字符串,并在单击按钮时将该字符串传递给查看器的OpenReport方法。

Viewer.cshtml

代码语言:javascript
复制
<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

代码语言:javascript
复制
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

代码语言:javascript
复制
public ActionResult Viewer(int? intParam) {
    var report = new XtraReport1();
    report.Parameters["intParam"].Value = intParam;
    report.Parameters["intParam"].Visible = false;
    return View(report);
}

在这里输入图像描述

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31562537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档