DEV XtraReport 动态构建报表之设计器的定制
来源:互联网 发布:淘宝客服提成是几个点 编辑:程序博客网 时间:2024/04/29 20:10
DEV自带的报表控件也是比较强大的,主要是可开发性很高,如果有足够精力的话完全可以探索到极致,由于时间的因素,在这里讲一讲如何通过代码动态生成定制化的报表设计器以及比较可观的报表,省去了在VS里一步步操作的步骤。
首先需要说明的就是报表在界面的显示方式,用到的是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; } }
设计器现在基本已经满足我们的要求了,篇幅有限,动态创建报表将会在下一篇里介绍到。
1 0
- DEV XtraReport 动态构建报表之设计器的定制
- DEV XtraReport 动态构建报表之样式设计
- dev express中xtrareport报表的设计
- dev XtraReport 做报表
- DEV控件的xtrareport 横向打印
- dev XtraReport做好的.repx文件显示
- 动态报表的创建 (XtraReport) 以及对字段的合计实现方法
- 使用DevExpress.XtraReports.UI.XtraReport 设计报表的时候如何格式化字符串
- XtraReport报表使用手记
- 动态构建双轴的FLEX报表
- 我对bds2006中使用xtrareport做报表的探索
- 构建定制的camera
- 运行时动态创建报表(五)报表设计器
- XtraReport报表Detail中的Table绑定列的值为0时不显示
- XtraReport报表中Designer和HTML View高度显示的不一样
- XtraReport的应用
- xtrareport的使用心得
- XtraReport控件的使用
- 仿购物车模块,点击编辑(完成)删除一个或者多个内容,上拉加载,下拉刷新
- 给datatable添加序号列
- git项目管理的详细过程(add,commit,status,commit)
- freemarker if 多条件判断
- 什么场景应该用 MongoDB
- DEV XtraReport 动态构建报表之设计器的定制
- [我眼中的C#]复杂的数据类型
- Mac中Android Studio的SVN使用详解
- IOS之高德地图多标记
- 【原创】C# 委托与事件的传递与封装案例
- MySQL ERROR 1005: Can't create table (errno: 150)解决办法
- Ceilometer Alarm
- Spark特征处理
- Django补充(2)