zoukankan      html  css  js  c++  java
  • DevExpress.XtraReports 如何动态运行时创建报表

    很长时间也没接触报表了。之前很久用过金质打印通和水晶报表

      最近在看 Dev的报表 发现讲Dev这套控件XtraReports内容方面的文章挺少的, 现讲一下我是如何动态的创建报表。分享给大家

      XtraReports报表正常的做法:

      制作过程简单说有两步:   第一步:画报表。报表中有一些带区:报表头,页头,明细,分组,页尾,报表尾等,(报表头、报表尾整个报表中只会加载一次,页头、页尾每一页都会加载一次,其他的就不说了。见图片)

       如图:报表头、报表尾整个报表中只会加载一次,页头、页尾每一页都会加载一次

      在这些带区中可以放控件,控件在Dev的左边控件栏可以拖拽上去,在属性视图中修改属性,跟WinForm或者WebForm拖拽控件做出一个窗体是类似的。-注意:现在这步画出的只是报表模板

    如图:是一个Dev的报表设计器的窗体,已加如一些带区

      左侧是一些控件 拖入控件可以设置控件的各种属性。

      报表设计好文件保存后是.repx 后缀类型的文件,和Winform的窗体保存的 Form1.cs 文件类似。在XtraReport中,每一个报表都是XtraReport或者其子类。如把XtraReport比做Winform。则同样的道理,所有的form都Form类的子类。Dev报表的所有控件都从XRControl继承,XRControl是继承于System.ComponentModel.Component的。Winform的控件都继承于Control类。

      第二步:绑定数据源。XtraReport的一个实例 myXtraReport.DataSource = 你的数据源。

      这样做先得去设计报表,非常麻烦,而且加入你有几百上上千张表表一一去设计就非常麻烦。

      我这篇文章就是想不用去先画报表,直接就生成报表,即运行时生成报表。

      先看一下简单的直接就生成报表的效果

     运行时显示一个数据表格中的数据 交替换表格的颜色。

      下面是代码

            public Form1()         {             InitializeComponent();             this.button1.Click += (o, e) =>            {                 XtraReport rpt = new XtraReport();// 建立报表实例                rpt.DataSource = FillDataset();//设置报表数据源                rpt.DataMember = ((DataSet)rpt.DataSource).Tables[0].TableName;                 InitBands(rpt);//添加带区(Bands)                InitStyles(rpt);//添加Styles                InitDetailsBasedonXRTable(rpt);//用XRTable显示报表                rpt.ShowPreviewDialog();             };         }

      初始化数据源

    FillDataset
            public DataSet FillDataset()         {             DataSet myDataSet = new DataSet();             myDataSet.DataSetName = "myDataSet";             DataTable table = new DataTable("Detail");
                myDataSet.Tables.Add(table);
                table.Columns.Add("Name"typeof(String));             table.Columns.Add("Address"typeof(String));             table.Columns.Add("Sex"typeof(String));             table.Columns.Add("Birthplace"typeof(String));             table.Columns.Add("Birthday"typeof(String));
                table.Rows.Add(new object[] { "Zhang""辽宁锦州""""辽宁""1983-XX-XX" });             table.Rows.Add(new object[] { "Wang""广东深圳""""辽宁""1984-10-XX" });             table.Rows.Add(new object[] { "Li""北京""""北京""1985-XX-XX" });             table.Rows.Add(new object[] { "Zhao""上海""""湖南""1984-XX-XX" });             table.Rows.Add(new object[] { "Liu""广东深圳""""辽宁""1985-2-XX" });             return myDataSet;         }

      添加带区

    InitBands
            public void InitBands(XtraReport rpt)         {             DetailBand detail = new DetailBand();             PageHeaderBand pageHeader = new PageHeaderBand();             ReportFooterBand reportFooter = new ReportFooterBand();             detail.Height = 20;             reportFooter.Height = 380;             pageHeader.Height = 20;
                rpt.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { detail, pageHeader, reportFooter });         }

      添加Styles

    InitStyles
            public void InitStyles(XtraReport rep)         {             XRControlStyle oddStyle = new XRControlStyle();             XRControlStyle evenStyle = new XRControlStyle();
                oddStyle.BackColor = Color.LightBlue;             oddStyle.StyleUsing.UseBackColor = true;             oddStyle.StyleUsing.UseBorders = false;             oddStyle.Name = "OddStyle";
                evenStyle.BackColor = Color.LightPink;             evenStyle.StyleUsing.UseBackColor = true;             evenStyle.StyleUsing.UseBorders = false;             evenStyle.Name = "EvenStyle";
                rep.StyleSheet.AddRange(new DevExpress.XtraReports.UI.XRControlStyle[] { oddStyle, evenStyle });         }

      用XRTable显示报表

    InitDetailsBasedonXRTable
            public void InitDetailsBasedonXRTable(XtraReport rpt)         {             DataSet ds = ((DataSet)rpt.DataSource);             int colCount = ds.Tables[0].Columns.Count;             int colWidth = (rpt.PageWidth - (rpt.Margins.Left + rpt.Margins.Right)) / colCount;
                
    // Create a table to represent headers            XRTable tableHeader = new XRTable();             tableHeader.Height = 20;             tableHeader.Width = (rpt.PageWidth - (rpt.Margins.Left + rpt.Margins.Right));             XRTableRow headerRow = new XRTableRow();             headerRow.Width = tableHeader.Width;             tableHeader.Rows.Add(headerRow);             headerRow.BackColor = Color.Gray;             headerRow.ForeColor = Color.White;
                
    // Create a table to display data            XRTable tableDetail = new XRTable();             tableDetail.Height = 20;             tableDetail.Width = (rpt.PageWidth - (rpt.Margins.Left + rpt.Margins.Right));             XRTableRow detailRow = new XRTableRow();             detailRow.Width = tableDetail.Width;             tableDetail.Rows.Add(detailRow);             tableDetail.EvenStyleName = "EvenStyle";             tableDetail.OddStyleName = "OddStyle";
                
    // Create table cells, fill the header cells with text, bind the cells to data            for (int i = 0; i < colCount; i++)             {                 XRTableCell headerCell = new XRTableCell();                 headerCell.Width = colWidth;                 headerCell.Text = ds.Tables[0].Columns[i].Caption;
                    XRTableCell detailCell = new XRTableCell();                 detailCell.Width = colWidth;                 detailCell.DataBindings.Add("Text"null, ds.Tables[0].Columns[i].Caption);                 if (i == 0)                 {                     headerCell.Borders = DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Bottom;                     detailCell.Borders = DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Bottom;                 }                 else                {                     headerCell.Borders = DevExpress.XtraPrinting.BorderSide.All;                     detailCell.Borders = DevExpress.XtraPrinting.BorderSide.All;                 }
                    
    // Place the cells into the corresponding tables                headerRow.Cells.Add(headerCell);                 detailRow.Cells.Add(detailCell);             }
                
    // Place the table onto a report's Detail band            rpt.Bands[BandKind.PageHeader].Controls.Add(tableHeader);             rpt.Bands[BandKind.Detail].Controls.Add(tableDetail);         }

      之后还会添加报表头和报表尾,页统计分组统计等。

      通过我给的代码相信大家 添加报表头和报表尾,页统计分组统计 也会模仿着动态加载出来。

  • 相关阅读:
    sublime中node测试环境
    常用的win dos命令
    html area图片热点
    Git常用指令整理(Git Cheat Sheet)
    Java研发技术学习路线
    编程+工具基础教程|网站整理
    廖雪峰 Git 教程 + Git-Cheat-Sheet 学习总结
    现成的HTML5框架
    记录下自己学习的点滴-开始写博客
    linux查看日志文件
  • 原文地址:https://www.cnblogs.com/peter-Blog/p/3342770.html
Copyright © 2011-2022 走看看