开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 3760|回复: 0

DevExpress使用心得八:用DevExpress制作水晶报表

[复制链接]

0

精华

0

贡献

6

赞扬

帖子
31
软币
206
在线时间
9 小时
注册时间
2015-9-24
发表于 2015-9-29 14:56:43 | 显示全部楼层 |阅读模式

最近在研究 DevExpress 的报表,果然非常强大,它的报表控件和其他专业的报表不相上下,于是想用它做一个水晶报表,顺便也提升一下自己的实践能力。下面就将整个过程写出来分享给大家:

添加报表

1、启动 Visual Studio (2008或者2010)。创建项目(由于我用的是MVC,所以此处也以MVC为例)

2、 添加Report文件夹,右键添加数据集TestReport,步骤如下:


然后再在服务器资源管理器添加服务器连接,然后选择你所需要的数据库,从其中拖拽出你所要的数据源对象,如图:


添加从表

  3、接着添加你所需要的从表,TestDetailReport,如图:


添加完,系统会自己将 Devexpress 相关的引用加进来,打开TestDetailReport从表,如下:


接着绑定你所需要的数据源,左上角的Report Tasks。


然后,使用右上角的Field List:


其中testStorage1是你刚所加的数据源,Parameters我们可以在其中添加所需参数:


设计从表页面

要注意要把Modifiers的属性 设为Public。接下来可以做从表页面了。工具箱里的Report Contorls有设计报表的各种控件:


  这里我们先用XRTable,只需把它拖拽到Detail中,可以自行设计。效果如下:


要绑定的数据直接从Field List中拉出来。在Report Task中有个属性 FilterString,使用它可以加入我们的过滤条件。其中?TaskId是我们刚手动在Parameters所添加的参数。


  这样从表就设计完成了,然后我们可以在PreView中预览,如果你添加的参数就传入你的参数就可以看到效果了。


添加主表

4、接下来我们就制作所需的主表,Master。重复第三步操作,像Report 中添加TestMasterReport主表。然后双击打开,从Report Controls中拖入XRsubReport控件到Dtail中。如图:


接着,我们为XRSubreport 控件绑定数据源,也就是我们刚才所做的从表。进入属性页,选择ReporSource 属性进行绑定,如果绑定不上,就重新生成一下就OK了。

然后,Detail上面的部分就相当于表头,在表头部分我们如果有数据也是需要从数据库中来的,那就重复上面的操作。先给主表绑定数据源,然后同样在 Field List中给它设置参数,比如就叫_TaskId (在上面设计从表时我们也给过参数,TaskId)。同样,也可以设置过滤条件,这里就不一一重复了。

这样主表就也差不多完成了,然后,我们选择预览:


其中_TaskId是我们在设计主表(Master)时,给的参数。TaskId是我们在设计从表(Detail)是给的参数。到这里报表就算设计完成了。然后,接下来是代码部分。

添加控制器

5、添加控制器  ReportController,在其中添加三个操作方法:

[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em]17

[size=1em]18

[size=1em]19

[size=1em]20

[size=1em]21

[size=1em]22

[size=1em]23

[size=1em]24

[size=1em]25

[size=1em]26

[size=1em]27

[size=1em]28

[size=1em]29

[size=1em]30

[size=1em]31

[size=1em]32

[size=1em]33

[size=1em]34

[size=1em]35

[size=1em]36

[size=1em]37

[size=1em]38

[size=1em]39

[size=1em]40

[size=1em][size=1em]using System;
[size=1em]using System.Collections.Generic;
[size=1em]using System.Linq;
[size=1em]using System.Web;
[size=1em]using System.Web.Mvc;
[size=1em]using DevExpress.Web;
[size=1em]using DevExpress.XtraReports.Web;
[size=1em]using DevExpress.XtraReports;
[size=1em]using GYS.Infrastructure.CommonHelper;
[size=1em]using GYS.WMS.Report.Report;


[size=1em]    public ActionResult Index()
[size=1em]        {
[size=1em]            Guid TaskId = ConverterHelper.ObjectToGuidValue(Request.QueryString["TaskId"]);
[size=1em]            Session["TaskId"] = TaskId;
[size=1em]            ViewData["Report"] = new TestMasterReportcs();
[size=1em]            return View();
[size=1em]        }


[size=1em]    public ActionResult DocumentViewerPartial()
[size=1em]        {
[size=1em]            var report = new TestMasterReportcs();
[size=1em]            report._TaskId.Value = Session["TaskId"];
[size=1em]            report.FillDataSource();
[size=1em]            report.ApplyFiltering();
[size=1em]            ViewData["Report"] = report;
[size=1em]            return PartialView("DocumentViewerPartial");
[size=1em]        }


[size=1em]    public ActionResult ExportDocumentViewer()
[size=1em]        {
[size=1em]            var report = new TestMasterReportcs();
[size=1em]            report._TaskId.Value = Session["TaskId"];
[size=1em]            report.FillDataSource();
[size=1em]            report.ApplyFiltering();
[size=1em]            return DevExpress.Web.Mvc.DocumentViewerExtension.ExportTo(report);
[size=1em]        }



上面三个方法也很简单:

其中Index ,我们首先得到所需的参数 TaskId,然后把它存入了Session 中,接着我们实例了主表TestMasterReport 。然后下面两个方法,首先从Session 中把参数取出来,把它赋给主表所设置的参数,在调用两个方法。

生成视图

6、然后,生成相应的视图,Index 和 DocumentViewerPartial

这是Index 视图:

[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em]17

[size=1em]18

[size=1em]19

[size=1em]20

[size=1em]21

[size=1em]22

[size=1em]23

[size=1em]24

[size=1em]25

[size=1em]26

[size=1em]27

[size=1em]28

[size=1em]29

[size=1em]30

[size=1em]31

[size=1em]32

[size=1em]33

[size=1em]34

[size=1em]35

[size=1em]36

[size=1em]37

[size=1em]38

[size=1em]39

[size=1em]40

[size=1em][size=1em]@{
[size=1em]    Layout = null;
[size=1em]}
[size=1em]<!DOCTYPE html>
[size=1em]<html>
[size=1em]<head>
[size=1em]    <meta name="viewport" content="width=device-width" />
[size=1em]    <title>Index</title>
[size=1em]    <script src="@Url.Content("~/Scripts/jquery-1.8.2.js")" type="text/javascript"></script>
[size=1em]</head>
[size=1em]<body>
[size=1em]    <div>
[size=1em]        @Html.DevExpress().GetStyleSheets(
[size=1em]        new StyleSheet { ExtensionSuite = ExtensionSuite.NavigationAndLayout },
[size=1em]        new StyleSheet { ExtensionSuite = ExtensionSuite.Editors },
[size=1em]        new StyleSheet { ExtensionSuite = ExtensionSuite.HtmlEditor },
[size=1em]        new StyleSheet { ExtensionSuite = ExtensionSuite.GridView },
[size=1em]        new StyleSheet { ExtensionSuite = ExtensionSuite.PivotGrid },
[size=1em]        new StyleSheet { ExtensionSuite = ExtensionSuite.Chart },
[size=1em]        new StyleSheet { ExtensionSuite = ExtensionSuite.Report },
[size=1em]        new StyleSheet { ExtensionSuite = ExtensionSuite.Scheduler },
[size=1em]        new StyleSheet { ExtensionSuite = ExtensionSuite.TreeList }
[size=1em]    )

[size=1em]        @Html.DevExpress().GetScripts(
[size=1em]        new Script { ExtensionSuite = ExtensionSuite.NavigationAndLayout },
[size=1em]        new Script { ExtensionSuite = ExtensionSuite.HtmlEditor },
[size=1em]        new Script { ExtensionSuite = ExtensionSuite.GridView },
[size=1em]        new Script { ExtensionSuite = ExtensionSuite.PivotGrid },
[size=1em]        new Script { ExtensionSuite = ExtensionSuite.Editors },
[size=1em]        new Script { ExtensionSuite = ExtensionSuite.Chart },
[size=1em]        new Script { ExtensionSuite = ExtensionSuite.Report },
[size=1em]        new Script { ExtensionSuite = ExtensionSuite.Scheduler },
[size=1em]        new Script { ExtensionSuite = ExtensionSuite.TreeList }
[size=1em]    )

[size=1em]    @Html.Partial("DocumentViewerPartial");
[size=1em]    </div>
[size=1em]</body>
[size=1em]</html>



DocumentViewerPartial 视图:

[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em][size=1em]@Html.DevExpress().DocumentViewer(settings =>{
[size=1em]    // The following settings are required for a Report Viewer.
[size=1em]    settings.Name = "documentViewer1";
[size=1em]    settings.Report = (TestMasterReportcs)ViewData["Report"];
[size=1em]    settings.SettingsSplitter.RightPaneVisible = false;
[size=1em]   
[size=1em]    // Callback and export route values specify corresponding controllers and their actions.
[size=1em]    // These settings are required as well.
[size=1em]    settings.CallbackRouteValues = new { Controller = "Report", Action = "DocumentViewerPartial" };
[size=1em]    settings.ExportRouteValues = new { Controller = "Report", Action = "ExportDocumentViewer" };
[size=1em]}).GetHtml();



添加打印

7、最后,基本差不多了,但是还差一个打印的方法。我们回到TestMasterReport 主表,给XRSubReport 绑定一个事件,BeforrePrint  打印用的。


双击Detail_BeforePrint 这个打印方法:

[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em][size=1em]private void Detail_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
[size=1em]  {
[size=1em]      var detailReport = _Subreport.ReportSource as TestDetailReport;
[size=1em]      detailReport.TaskId.Value = this._TaskId.Value;
[size=1em]      detailReport.FillDataSource();
[size=1em]      detailReport.ApplyFiltering();
[size=1em]  }



其中的代码如上,_Subreport 是TestMasterReport 主表的名称,通过它打点调出 从表的数据源,转换成 从表 TestDetailReport,然后TaskId是我们给从表要传入的参数,刚才我们已经给 TestMasterReport _TaskId 赋过值了,所以现在可以直接把_TaskId 的值给 TaskId,同样调用两个方法,就完成了。

运行起来,效果如下:


更多在线资源

By CSDN小辉


回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-5-23 01:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表