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

 

效果:

 

转载于:https://www.cnblogs.com/SoftWareIe/p/8985780.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值