zoukankan      html  css  js  c++  java
  • C# WinfForm 控件之dev报表 XtraReport (八)动态生成报表

    功能说明:生成一个报表文件DV1,保存到本地AA.rep,再重新加载这个文件到DV2

    1.布局如下图:

        panel1 上有三个button

        panel2上有个documentView dv1

        panel3上有个dv2

        panel2与panel3之间有一个splitter               

    代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using DevComponents.DotNetBar;
    using System.Data.SqlClient;
    using DevExpress.XtraReports.UI;
    
    namespace 收银test
    {
        public partial class frmCreateReport : DevComponents.DotNetBar.Metro.MetroForm
        {
          
    
            public frmCreateReport()
            {
                InitializeComponent();
    
                button1.Click += Button1_Click;
                button2.Click += Button2_Click;
                button3.Click += Button3_Click;
            }
    
            //
            //加载报表
            private void Button3_Click(object sender, EventArgs e)
            {
                XtraReport xr = new XtraReport();
                xr.LoadLayout("AA.rep");
                xr.DataSource = GetDateSet();
                xr.CreateDocument();
                dv2.DocumentSource = xr;
            }
    
            //
            //保存报表
            private void Button2_Click(object sender, EventArgs e)
            {
                try
                {
                    ((XtraReport)Dv1.DocumentSource).SaveLayout("AA.rep");
                    MessageBox.Show("保存成功");
                }
                catch (Exception ex)
                { MessageBox.Show(ex.Message.ToString()); }
            }
    
            //
            //生成报表
            private void Button1_Click(object sender, EventArgs e)
            {
                /*
                 0.创建数据集
                 1.创建报表
                 2.创建容器 及 控件
                 */
    
                DataSet ds = GetDateSet();
    
                XtraReport xr = new XtraReport();
                xr.DataSource = ds;
    
                iniXRComponent(xr);
    
                xr.CreateDocument();
                Dv1.DocumentSource = xr;
            }
    
            //
            //创建容器及控件
            private void iniXRComponent(XtraReport xr)
            {
                //添加 带区
                DetailBand detail = new DetailBand();
                PageHeaderBand pageHeader = new PageHeaderBand();
                ReportFooterBand reportFooter = new ReportFooterBand();
    
                detail.HeightF = 20;
                reportFooter.HeightF = 380;
                pageHeader.HeightF = 20;
    
                xr.Bands.AddRange(new Band[] { detail, pageHeader, reportFooter });
    
                //添加控件
                InitDetailsBasedonXRTable(xr);
            }
    
            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;//每列宽
    
                //创建一个列表头
                XRTable tableHeader = new XRTable();
                tableHeader.HeightF = 20;
                tableHeader.WidthF = (rpt.PageWidth - (rpt.Margins.Left + rpt.Margins.Right));
    
                XRTableRow headerRow = new XRTableRow();
                headerRow.WidthF = tableHeader.WidthF;
                tableHeader.Rows.Add(headerRow);
                headerRow.BackColor = Color.Gray;
                headerRow.ForeColor = Color.White;
    
                //创建数据
                XRTable tableDetail = new XRTable();
                tableDetail.HeightF = 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";
    
                //加入cell表头用列名填充 表身用数据填充
                for (int i = 0; i < colCount; i++)
                {
                    XRTableCell headerCell = new XRTableCell();
                    headerCell.WidthF = colWidth;//列宽
                    headerCell.Text = ds.Tables[0].Columns[i].Caption;
    
                    XRTableCell detailCell = new XRTableCell();
                    detailCell.WidthF = colWidth;
                    detailCell.DataBindings.Add("Text", null, ds.Tables[0].Columns[i].Caption);
    
    
                    if (i == 0)
                    {
                        headerCell.Borders = DevExpress.XtraPrinting.BorderSide.All;
                        detailCell.Borders = DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom;
                    }
                    else
                    {
                        headerCell.Borders = DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom;
                        detailCell.Borders = DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom;
                    }
    
                    //填充到对应位置
                    headerRow.Cells.Add(headerCell);
                    detailRow.Cells.Add(detailCell);
                }
    
                // 加到report中
                rpt.Bands[BandKind.PageHeader].Controls.Add(tableHeader);
                rpt.Bands[BandKind.Detail].Controls.Add(tableDetail);
            }
    
            //创建数据集
            private DataSet GetDateSet()
            {
                DataSet ds = new DataSet();
                using (SqlConnection con = new SqlConnection("server =.;uid=sa;pwd=123;database=test"))
                {
                    using (SqlDataAdapter adp = new SqlDataAdapter("select id,userName,roles from usersTmp", con))
                    {
    
                        adp.Fill(ds);
    
                    }
                }
                return ds;
            }
        }
    }
    View Code

    效果:

  • 相关阅读:
    分布式服务框架的雪崩问题
    分布式系统中的幂等性
    Exception引起的性能问题
    TFS2017新特性(一)
    云平台架构变迁
    MQ基本概念
    SVN版本管理
    1年内4次架构调整,谈Nice的服务端架构变迁之路
    鏖战双十一-阿里直播平台面临的技术挑战
    统一日志平台初探
  • 原文地址:https://www.cnblogs.com/SoftWareIe/p/8985780.html
Copyright © 2011-2022 走看看