DEV 报表学习笔记

48 篇文章 0 订阅
11 篇文章 0 订阅

核心代码,报表类:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using DevExpress.XtraReports.UI;
using System.Data;
using System.Collections.Generic;

namespace CommonLib.Report
{
    public partial class UserXtraReportBase : DevExpress.XtraReports.UI.XtraReport
    {
        public UserXtraReportBase()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 绑定数据
        /// </summary>
        /// <param name="ds"></param>
        public void BindData(List<DataSet> dsList)
        {
            #region 报表本身的数据源绑定
            if (!string.IsNullOrEmpty(Tag.ToString()))
            {
                string _groupIndex = Tag.ToString().Split(',')[0];
                string _dtIndex = Tag.ToString().Split(',')[1];
                string _relationName = Tag.ToString().Split(',')[2];
                string _filedName = Tag.ToString().Split(',')[3];

                if (_dtIndex == "")
                {
                    DataSource = dsList[int.Parse(_groupIndex)];
                    DataMember = _relationName;
                }
                else
                {
                    DataSource = dsList[int.Parse(_groupIndex)].Tables[int.Parse(_dtIndex)];
                    DataMember = dsList[int.Parse(_groupIndex)].Tables[int.Parse(_dtIndex)].TableName;
                }
            }
            #endregion

            #region 带区的数据源绑定
            var _detailReportList = AllControls<DetailReportBand>();
            foreach (DetailReportBand _c in _detailReportList)
            {
                if (_c.GetType().ToString() != typeof(DetailReportBand).ToString()) continue;
                if (string.IsNullOrEmpty(_c.Tag.ToString()))
                    continue;

                string _groupIndex = _c.Tag.ToString().Split(',')[0];
                string _dtIndex = _c.Tag.ToString().Split(',')[1];
                string _relationName = _c.Tag.ToString().Split(',')[2];
                string _filedName = _c.Tag.ToString().Split(',')[3];

                #region 如果被绑定的表无数据,则隐藏该DetailReport带区
                if (dsList[int.Parse(_groupIndex)].Tables[int.Parse(_dtIndex)].Rows.Count == 0)
                    _c.Visible = false;
                #endregion

                _c.DataSource = dsList[int.Parse(_groupIndex)];
                if (_relationName != "")
                {
                    _c.DataMember = _relationName;
                }
                else if (_dtIndex != "")
                {
                    _c.DataMember = dsList[int.Parse(_groupIndex)].Tables[int.Parse(_dtIndex)].TableName;
                }
                else
                    _c.DataMember = "";
            }
            #endregion

            #region 在这里开发各种报表控件的数据绑定
            #region 标签
            var _xrLabelList = AllControls<XRLabel>();
            foreach (XRLabel _c in _xrLabelList)
            {
                if (_c.GetType().ToString() != typeof(XRLabel).ToString()) continue;
                BindXRControl("Text", dsList, _c);
            }
            #endregion

            #region 选框
            var _xrCheckBoxList = AllControls<XRCheckBox>();
            foreach (XRCheckBox _c in _xrCheckBoxList)
            {
                if (_c.GetType().ToString() != typeof(XRCheckBox).ToString()) continue;
                BindXRControl("Checked", dsList, _c);
            }  
            #endregion

            #region 富文本
            var _xrRickTextList = AllControls<XRRichText>();
            foreach (XRRichText _c in _xrRickTextList)
            {
                if (_c.GetType().ToString() != typeof(XRRichText).ToString()) continue;
                BindXRControl("Text", dsList, _c);
            }  
            #endregion

            #region 图片
            var _xrPictureBoxList = AllControls<XRPictureBox>();
            foreach (XRPictureBox _c in _xrPictureBoxList)
            {
                if (_c.GetType().ToString() != typeof(XRPictureBox).ToString()) continue;
                BindXRControl("Image", dsList, _c);
            }
            #endregion

            #region 单元格
            var _xrTableCellList = AllControls<XRTableCell>();
            foreach (XRTableCell _c in _xrTableCellList)
            {
                if (_c.GetType().ToString() != typeof(XRTableCell).ToString()) continue;
                BindXRControl("Text", dsList, _c);
            }  
            #endregion

            #region 条形码
            var _xrBarCodeList = AllControls<XRBarCode>();
            foreach (XRBarCode _c in _xrBarCodeList)
            {
                if (_c.GetType().ToString() != typeof(XRBarCode).ToString()) continue;
                BindXRControl("Text", dsList, _c);
            }
            #endregion
            #endregion
        }

        public static void BindXRControl(string propertyName, List<DataSet> dsList, XRControl c)
        {
            if (string.IsNullOrEmpty(c.Tag.ToString()))
                return;

            string _groupIndex = c.Tag.ToString().Split(',')[0];
            string _dtIndex = c.Tag.ToString().Split(',')[1];
            string _relationName = c.Tag.ToString().Split(',')[2];
            string _filedName = c.Tag.ToString().Split(',')[3];

            if (_relationName != "")
            {
                string _columnName = string.Format("{0}.{1}", _relationName, _filedName);
                c.DataBindings.Add(propertyName, dsList[int.Parse(_groupIndex)], _columnName);
            }
            else if (_dtIndex != "")
            {
                c.DataBindings.Add(propertyName, dsList[int.Parse(_groupIndex)].Tables[int.Parse(_dtIndex)], _filedName);
            }
            else
                c.DataBindings.Add(propertyName, dsList[int.Parse(_groupIndex)], _filedName);
        }

        /// <summary>
        /// 判断控件Tag中是否定义了绑定数据的参数
        /// </summary>
        /// <param name="tag"></param>
        /// <returns></returns>
        public static bool HasTag(object tag)
        {
            if (tag == null || tag.ToString() == "" || !tag.ToString().Contains(","))
                return false;
            return true;
        }

        /// <summary>
        /// 获取控件Tag参数之中包含的表索引
        /// </summary>
        /// <param name="tag"></param>
        /// <returns></returns>
        public static int GetTableIndex(object tag)
        {
            return int.Parse(tag.ToString().Split(',')[0]);
        }

        /// <summary>
        /// 获取控件Tag参数之中包含的字段名称
        /// </summary>
        /// <param name="tag"></param>
        /// <returns></returns>
        public static string GetColumnName(object tag)
        {
            return tag.ToString().Split(',')[1];
        }

    }
}

报表控件在Preview时触发事件来更改指定控件值:

private void simpleButton4_Click(object sender, EventArgs e)
        {
            report.FindControl("xrLabel1", false).PreviewClick += Form1_PreviewClick;
        }

        void Form1_PreviewClick(object sender, PreviewMouseEventArgs e)
        {
            e.Brick.Text = DateTime.Now.ToString();
            e.PreviewControl.Refresh();
        }

将报表显示到DocumentViewer控件之上的关键代码

        XtraReport1 report;
        DocumentViewer _doc = new DocumentViewer();
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            report = new XtraReport1();
            report.BindData();
            report.CreateDocument();
            _doc.DocumentSource = report;
        }

报表保存和加载文档文件的代码

report.PrintingSystem.SaveDocument();
report.PrintingSystem.LoadDocument();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值