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

    效果:

  • 相关阅读:
    openwrt 相关文章
    负载均衡相关文章
    Today's Progress
    Rodrigues formula is beautiful, but uneven to sine and cosine. (zz Berkeley's Page)
    Camera Calibration in detail
    Fundamental Matrix in Epipolar
    Camera Calibration's fx and fy do Cares in SLAM
    FilterEngine::apply
    FilterEngine 类解析——OpenCV图像滤波核心引擎(zz)
    gaussBlur
  • 原文地址:https://www.cnblogs.com/SoftWareIe/p/8985780.html
Copyright © 2011-2022 走看看