DEV XtraReport 动态构建报表之设计器的定制
2017-03-16 14:57
721 查看
DEV自带的报表控件也是比较强大的,主要是可开发性很高,如果有足够精力的话完全可以探索到极致,由于时间的因素,在这里讲一讲如何通过代码动态生成定制化的报表设计器以及比较可观的报表,省去了在VS里一步步操作的步骤。
首先需要说明的就是报表在界面的显示方式,用到的是documentViewer控件,直接绑定报表文件即可:
XtraReport rpt = new XtraReport();
//将报表与控件关联
documentViewer1.DocumentSource = rpt;
//这一句必须要,参数为true则是在后台加载,报表数据量大的时候建议采用这种方式
//没有参数的加载方式就是等所有数据加载好了再显示,不推荐
rpt.CreateDocument(true);
接下来仔细说说今天的话题:
默认报表设计器个人觉得布局不大合理,用起来也不够方便,很多面板其实是可以停靠的,图片如下:
我们自己加载设计器,然后进行定制化的操作之后,界面可以顺心很多,代码和效果如下:
加载好之后,你会发现设计器的数据源就是你所加载的报表的数据源,这个很重要,下一篇我会着重讲讲xtrareport对报表以及数据源的动态控制。这时如果你对报表进行了操作,每次关闭时都会弹出对话框问你是否保存,而且其保存的形式竟然是保存为资源文件,我们不可能每次设计时都要保存一次文件,所以上面写到的两个事件就能派上用场了。
要想它不弹出保存对话框,我们必须更改报表的状态:
设计器现在基本已经满足我们的要求了,篇幅有限,动态创建报表将会在下一篇里介绍到。
首先需要说明的就是报表在界面的显示方式,用到的是documentViewer控件,直接绑定报表文件即可:
XtraReport rpt = new XtraReport();
//将报表与控件关联
documentViewer1.DocumentSource = rpt;
//这一句必须要,参数为true则是在后台加载,报表数据量大的时候建议采用这种方式
//没有参数的加载方式就是等所有数据加载好了再显示,不推荐
rpt.CreateDocument(true);
接下来仔细说说今天的话题:
1. XtraReport设计界面的定制
所谓定制,当然是对其设计界面进行一些自定义的操作,比如显示或者隐藏某个面板、某个按钮,再者增加或者删除某个事件等等。如果不需要这些定制的话,就只需要直接用报表自带的方法调出设计器即可,如下://ribbon界面的设计器 rpt.ShowRibbonDesigner(); //普通界面设计器 rpt.ShowDesigner();
默认报表设计器个人觉得布局不大合理,用起来也不够方便,很多面板其实是可以停靠的,图片如下:
我们自己加载设计器,然后进行定制化的操作之后,界面可以顺心很多,代码和效果如下:
XRDesignRibbonForm designForm = new XRDesignRibbonForm(); //加载要设计的报表 designForm.OpenReport(rpt); //隐藏部分按钮 designForm.DesignRibbonController.XRDesignPanel.SetCommandVisibility(new ReportCommand[]{ ReportCommand.NewReport, ReportCommand.SaveFileAs, ReportCommand.NewReportWizard, ReportCommand.OpenFile }, CommandVisibility.None); // 设置各面板的停靠位置以及是否显示 designForm.DesignDockManager[DesignDockPanelType.PropertyGrid].Dock = DevExpress.XtraBars.Docking.DockingStyle.Fill; designForm.DesignDockManager[DesignDockPanelType.PropertyGrid].DockAsTab(designForm.DesignDockManager[DesignDockPanelType.FieldList], 0); designForm.DesignDockManager[DesignDockPanelType.ErrorList].DockTo(DevExpress.XtraBars.Docking.DockingStyle.Left); designForm.DesignDockManager[DesignDockPanelType.GroupAndSort].DockAsTab(designForm.DesignDockManager[DesignDockPanelType.ErrorList], 0); designForm.DesignDockManager[DesignDockPanelType.ToolBox].Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; //添加设计器关闭时的事件 designForm.FormClosing += new FormClosingEventHandler(designForm_FormClosing); //报表状态发生改变时触发的事件 designForm.DesignRibbonController.XRDesignPanel.ReportStateChanged += new ReportStateEventHandler(XRDesignPanel_ReportStateChanged); // 打开设计器 designForm.ShowDialog();
加载好之后,你会发现设计器的数据源就是你所加载的报表的数据源,这个很重要,下一篇我会着重讲讲xtrareport对报表以及数据源的动态控制。这时如果你对报表进行了操作,每次关闭时都会弹出对话框问你是否保存,而且其保存的形式竟然是保存为资源文件,我们不可能每次设计时都要保存一次文件,所以上面写到的两个事件就能派上用场了。
要想它不弹出保存对话框,我们必须更改报表的状态:
void XRDesignPanel_ReportStateChanged(object sender, ReportStateEventArgs e) { if (e.ReportState == ReportState.Changed) { //状态发生改变,立刻设为保存状态 ((XRDesignPanel)sender).ReportState = ReportState.Saved; } }这样它就不会每次都要我们保存文件了,但是是否需要保存修改还是要判断的:
private void designForm_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dlgResult = MessageBox.Show("是否保存更改?", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); if (dlgResult == DialogResult.Yes) { //这里来执行保存的操作,建议保存为流,这样可以考虑存数据库 MemoryStream ms = new MemoryStream(); rpt.SaveLayout(ms); //do the save things... } else if (dlgResult == DialogResult.Cancel) { e.Cancel = true; } }
设计器现在基本已经满足我们的要求了,篇幅有限,动态创建报表将会在下一篇里介绍到。
相关文章推荐
- DEV XtraReport 动态构建报表之样式设计
- VB2005如何设计带动态输出参数字段的水晶报表
- 运行时动态创建报表(五)报表设计器
- 使用silverlight构建一个工作流设计器(十三)(动态生成流程图片下载_上)
- DevExpress.XtraReport动态报表的制作
- Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色
- 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载
- 动态报表的创建 (XtraReport) 以及对字段的合计实现方法
- 动态构建双轴的FLEX报表
- [Jasper使用总结]iReport报表设计-动态列实现
- 在线报表设计实战系列 – ⑤制作动态列与静态列混排的报表
- [Jasper使用总结]iReport报表设计-动态列实现
- Dev报表——动态绑定实体对象(版本号:15.2 )
- 使用silverlight构建一个工作流设计器(十四)(动态生成流程图片下载_下)
- Developer Express 之 XtraReport如何显示设计窗体,打开已设计过的报表
- 在线报表设计实战系列 – ⑤制作动态列与静态列混排的报表
- 使用DevExpress.XtraReports.UI.XtraReport 设计报表的时候如何格式化字符串
- 如何快速自动生成并定制报表
- 报表设计-筛选数据
- 在VB中使用动态分组报表