Devexpress 控件做水晶报表小试牛刀(Master-Detail)!!!
来源:互联网 发布:省委宣传部 知乎 编辑:程序博客网 时间:2024/05/17 04:56
最近由于工作需要,项目中要求做水晶报表,所以就稍微研究了下 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)!!!
- DevExpress控件XtraGrid的Master-Detail用法
- DevExpress XtraReports报表入门教程:创建一个Master-Detail主从报表
- devexpress 水晶报表控件 实现递归显示
- DevExpress ASPXGridView 主从表 master detail 动态绑定数据
- 如何为 DevExpress.XtraGrid.GridControl 添加 Master-Detail 关系
- 使用Devexpress 的gridControl 显示DataTable的Master-Detail关系
- BCB下数据库报表Master/Detail关系功能的实现 |数据库报表,Master/Detail关系,主从复合结构
- DevExpress Grid中实现点击Detail获得Master rowHandle的方法
- 报表控件DevExPress的一些用法记录
- 水晶报表CrystalReportViewer之“创建控件错误”
- Master-Detail GridView
- Master-Detail GridView
- ASPxGridView之Master-Detail
- Master-Detail 用户界面
- 请问水晶报表中是否可以做交互式报表?
- FastReport for.Net开发指南-主从表(Master/Detail)报表设计详解
- [水晶报表][推荐]activereport报表控件的详细使用说明
- HTTP/1.1 304 Not Modified
- jquery 8中特效
- Java中SimpleDateFormat用法详解-日期时间格式设置
- 数据驱动测试 Robotium
- Mybatis--<![CDATA[ sql 语句 ]]> 不用解析
- Devexpress 控件做水晶报表小试牛刀(Master-Detail)!!!
- linux 下引用第三方jar包 环境配置
- Git下的冲突解决
- WPF学习第十集-深入浅出话资源
- Nagios安装及配置
- HDU 1180(bfs)
- python: 列表、字典
- const 用法
- C#文件流的操作