最近由于工作需要,项目中要求做水晶报表,所以就稍微研究了下 Devexpress控件做报表的功能。由于以前博主做报表都是用的是VS自带的,所以有什么不对的还希望大家多多指教。

添加从表

    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,同样调用两个方法,就完成了

运行起来,效果如下:

恩, 这就是 Devexpress 控件 做的水晶报表吧,大致就是这样的,感觉用起来还可以,END。







Devexpress 控件做水晶报表小试牛刀(Master-Detail)!!!相关推荐

  1. 只用最适合的! 全面对比主流 .NET 报表控件:水晶报表、FastReport、ActiveReports 和 Stimulsoft...

    原文:只用最适合的! 全面对比主流 .NET 报表控件:水晶报表.FastReport.ActiveReports 和 Stimulsoft 前言 随着 .NET 平台的出现,报表相关的开发控件随之出 ...

  2. 转发:只用最适合的! 全面对比主流 .NET 报表控件:水晶报表、FastReport、ActiveReports 和 Stimulsoft

    前言 随着 .NET 平台的出现,报表相关的开发控件随之出现,目前已经有若干成熟的产品可供开发人员使用,本文旨在通过从不同维度对比目前最流行的4款 .NET报表控件,给所有报表开发人员在做产品选型时一 ...

  3. 【原创】DevExpress控件GridControl中的布局详解

    在进行DevExpress控件GridControl的使用时,因控件的灵活性,所以用户会经常进行拖动控件的列,以达到自己满意的样式, 但下次再打开时系统就会重新还原到原有的布局风格,为了能够保持用户之 ...

  4. DevExpress控件GridControl中的布局详解 【转】

    DevExpress控件GridControl中的布局详解 [转] 2012-10-24 13:27:28|  分类: devexpress |  标签:devexpress  |举报|字号 订阅 h ...

  5. DevExpress控件使用系列--ASPxTreeList

    DevExpress控件使用系列--ASPxTreeList 控件功能 结合列表控件及树控件的优点,在列表控件中实现类型树的多层级操作  官方说明 http://documentation.devex ...

  6. 线程访问 DevExpress控件异常时 解决方法

    线程访问 DevExpress控件异常时 解决方法 Control.CheckForIllegalCrossThreadCalls = false; DevExpress.Data.CurrencyD ...

  7. DevExpress控件之GridControl控件

    DevExpress控件之GridControl控件 http://blog.sina.com.cn/s/blog_6769068d0100iucx.html 1.  设置数据源: string sq ...

  8. 在Sharepoint 2010中使用ReportViewer控件展示RDLC报表

    微软的Visual studio提供了ReportViewer控件以及RDLC报表设计工具.下文主要介绍如何在Sharepoint 2010项目开发中使用ReportViewer和RDLC生成项目报表 ...

  9. DevExpress控件使用经验总结

    DevExpress控件使用经验总结 DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发 ...

最新文章

  1. easypoi实现Excel导入
  2. 每日小记 2017 2.9
  3. 2016/06/11
  4. Apache OpenNLP下载
  5. GPCP全球月降水量数据下载与读取
  6. linux下telnet工具下载,telnet.exe下载
  7. 在Excel中用vba编写的进销存管理系统
  8. EasyCamera开源摄像机接入海康威视摄像机PS流转ES流
  9. 从培训机构出来的程序员,后来都怎么样了?
  10. 白痴qwerta的胡言乱语(一句话日度感想?
  11. 怎么用计算机给u盘加密文件,win10电脑怎么给U盘文件夹加密
  12. javascript实现锁定网页、密码解锁效果(屏幕保护效果)
  13. easyui的datagrid可编辑框小功能实例
  14. 2023你冲不冲,冲冲冲冲~~
  15. 年末大盘点 2008十大最受欢迎的装机软件
  16. iOS 图像选取器UIImagePickerController
  17. 罗切斯特大学读计算机博士,2020年罗切斯特大学博士申请条件
  18. docker之网络配置
  19. [日常训练] 藏宝路径
  20. 【OpenGL学习笔记五】 索引缓冲对象EBO

热门文章

  1. 高碳合金热轧耐磨钢球
  2. scala-pattern-match-basic
  3. ​掘金3000亿在线教育市场 ‖ 沪江英语、流利说、Master Learner如何用AI影响1400万教师和1.88亿学生...
  4. 毕业设计 STM32的智能WIFI视频人脸追踪监控系统
  5. 机器学习使用兰氏距离的最小距离聚类法以及散点图展示
  6. Business 2.0评出2007年25大网络新锐
  7. Java计算机毕业设计甜心驿站饮品信息管理源码+系统+数据库+lw文档
  8. C语言幸运星课程设计,涉及约瑟夫环算法,多个版本
  9. Mac下修改git用户名,邮箱
  10. 苹果Mac怎样设置语言输入文字?