提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|使用教程|编辑:我只采一朵|2014-07-16 10:16:10.000|阅读 11797 次
概述:本文介绍了如何使用DevExpress报表控件制作水晶报表的全过程。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
最近在研究 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,在其中添加三个操作方法:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using DevExpress.Web; using DevExpress.XtraReports.Web; using DevExpress.XtraReports; using GYS.Infrastructure.CommonHelper; using GYS.WMS.Report.Report; public ActionResult Index() { Guid TaskId = ConverterHelper.ObjectToGuidValue(Request.QueryString["TaskId"]); Session["TaskId"] = TaskId; ViewData["Report"] = new TestMasterReportcs(); return View(); } public ActionResult DocumentViewerPartial() { var report = new TestMasterReportcs(); report._TaskId.Value = Session["TaskId"]; report.FillDataSource(); report.ApplyFiltering(); ViewData["Report"] = report; return PartialView("DocumentViewerPartial"); } public ActionResult ExportDocumentViewer() { var report = new TestMasterReportcs(); report._TaskId.Value = Session["TaskId"]; report.FillDataSource(); report.ApplyFiltering(); return DevExpress.Web.Mvc.DocumentViewerExtension.ExportTo(report); }
上面三个方法也很简单:
其中Index ,我们首先得到所需的参数 TaskId,然后把它存入了Session 中,接着我们实例了主表TestMasterReport 。然后下面两个方法,首先从Session 中把参数取出来,把它赋给主表所设置的参数,在调用两个方法。
6、然后,生成相应的视图,Index 和 DocumentViewerPartial
这是Index 视图:
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="@Url.Content("~/Scripts/jquery-1.8.2.js")" type="text/javascript"></script> </head> <body> <div> @Html.DevExpress().GetStyleSheets( new StyleSheet { ExtensionSuite = ExtensionSuite.NavigationAndLayout }, new StyleSheet { ExtensionSuite = ExtensionSuite.Editors }, new StyleSheet { ExtensionSuite = ExtensionSuite.HtmlEditor }, new StyleSheet { ExtensionSuite = ExtensionSuite.GridView }, new StyleSheet { ExtensionSuite = ExtensionSuite.PivotGrid }, new StyleSheet { ExtensionSuite = ExtensionSuite.Chart }, new StyleSheet { ExtensionSuite = ExtensionSuite.Report }, new StyleSheet { ExtensionSuite = ExtensionSuite.Scheduler }, new StyleSheet { ExtensionSuite = ExtensionSuite.TreeList } ) @Html.DevExpress().GetScripts( new Script { ExtensionSuite = ExtensionSuite.NavigationAndLayout }, new Script { ExtensionSuite = ExtensionSuite.HtmlEditor }, new Script { ExtensionSuite = ExtensionSuite.GridView }, new Script { ExtensionSuite = ExtensionSuite.PivotGrid }, new Script { ExtensionSuite = ExtensionSuite.Editors }, new Script { ExtensionSuite = ExtensionSuite.Chart }, new Script { ExtensionSuite = ExtensionSuite.Report }, new Script { ExtensionSuite = ExtensionSuite.Scheduler }, new Script { ExtensionSuite = ExtensionSuite.TreeList } ) @Html.Partial("DocumentViewerPartial"); </div> </body> </html>
DocumentViewerPartial 视图:
@Html.DevExpress().DocumentViewer(settings =>{ // The following settings are required for a Report Viewer. settings.Name = "documentViewer1"; settings.Report = (TestMasterReportcs)ViewData["Report"]; settings.SettingsSplitter.RightPaneVisible = false; // Callback and export route values specify corresponding controllers and their actions. // These settings are required as well. settings.CallbackRouteValues = new { Controller = "Report", Action = "DocumentViewerPartial" }; settings.ExportRouteValues = new { Controller = "Report", Action = "ExportDocumentViewer" }; }).GetHtml();
7、最后,基本差不多了,但是还差一个打印的方法。我们回到TestMasterReport 主表,给XRSubReport 绑定一个事件,BeforrePrint 打印用的。
双击Detail_BeforePrint 这个打印方法:
private void Detail_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { var detailReport = _Subreport.ReportSource as TestDetailReport; detailReport.TaskId.Value = this._TaskId.Value; detailReport.FillDataSource(); detailReport.ApplyFiltering(); }
其中的代码如上,_Subreport 是TestMasterReport 主表的名称,通过它打点调出 从表的数据源,转换成 从表 TestDetailReport,然后TaskId是我们给从表要传入的参数,刚才我们已经给 TestMasterReport _TaskId 赋过值了,所以现在可以直接把_TaskId 的值给 TaskId,同样调用两个方法,就完成了。
运行起来,效果如下:
By CSDN小辉
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
行业领先的界面控件开发包,帮助企业构建卓越应用!
DevExpress WPF Subscription高效MVVM开发模式,WPF界面解决方案首选工具,帮助企业实现酷炫动效界面。
DevExpress Silverlight Controls高性价比高实用性的Silverlight用户界面控件套包,拥有大量的示例和帮助文档,开发者能够快速上手!
DevExpress WinForms Subscription为Windows Forms平台创建具有影响力的业务解决方案,高性价比WinForms界面控件套包。
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢