动态RDLC报表(三)

动态RDLC报表类DynamicReport:基础设置

       了解了RDLC报表的结构后,我们就来把传递进来的数据转变成符合RDLC报表结构的xml格式文档,用一个类的形式来做,方便以后调用。
       这个报表是按我项目的需要来做的,基本要求:
      1、可以设置页面大小、边距、字体、数据表样式;
      2、可以做多维表头和统计;
      3、可以添加多个数据表和标题;
      4、可以自动签名、盖章。

   基础的代码如下:
 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml;
using System.Data;
using Microsoft.Reporting.WinForms;
using System.Text;
using System.Collections;
using System.IO;
using System.Reflection;
using System.Xml.Serialization;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Printing;
using System.Drawing.Imaging;

namespace RDLC
{
    public class DynamicReport : IDynamicReport
    {
        //需要一个ReportViewer来接收送递进来的ReportViewer加载RDLC
        private ReportViewer _report;
        private string languageCode = "zh_CHS";
        private string totalString = "合计:";
        private string notesString = "备注:";
        //设置字体和大小
        private string fontString = "微软雅黑";
        private int fontSize = 9;
        //设置页面大小
        private float pageWidth = 21.0F;
        private float pageHeight = 29.7F;
        //设置上边距和左边距,右边和下边就不用设置了,一般是对称的
        private float topMargin = 0.8F;
        private float leftMargin = 1.5F;

        #region  参数设置
        public string LanguageCode
        {
            get { return languageCode; }
            set
            {
                languageCode = value;
                if (languageCode == "zh_CHT")
                {
                    totalString = "合計:";
                    notesString = "備註:";
                }
                else if (languageCode == "en")
                {
                    totalString = "Total:";
                    notesString = "Remark:";
                }
                else
                {
                    totalString = "合计:";
                    notesString = "备注:";
                }
            }
        }
        public string FontString
        {
            get { return fontString; }
            set { fontString = value; }
        }
        public int FontSize
        {
            get { return fontSize; }
            set { fontSize = value; }
        }
        public float PageHeight
        {
            get { return pageHeight; }
            set { pageHeight = value; }
        }
        public float PageWidth
        {
            get { return pageWidth; }
            set { pageWidth = value; }
        }
        public float LeftMargin
        {
            get { return leftMargin; }
            set { leftMargin = value; }
        }
        public float TopMargin
        {
            get { return topMargin; }
            set { topMargin = value; headerHeight = value; }
        }
        #endregion

        public DynamicReport()
        {
        }
    }
}

这里继承了一个IDynamicReport接口

    public interface IDynamicReport
    {
        void SetReport(ReportViewer reportViewer, DisplayMode displayMode = DisplayMode.PrintLayout, ZoomMode zoomMode = ZoomMode.PageWidth);
        void AddData(DataTable dataTable, string totalColumn);
        void ShowReport();
        void LoadReport(string reportPath);
        void SetColoumStyle(List<ReportColoumStyle> coloumStyle);
    }

需要为表格的样式增加一个辅助类和枚举,这样主涌方便地设置表格的样式。

    public class ReportColoumStyle
    {
        public string ColoumName { get; set; }
        public float ColoumWidth { get; set; }
        public TextAlign TextAlign { get; set; }
        public ConsoleColor ConsoleColor { get; set; }
        public Boolean IsShortDate { get; set; }

        public ReportColoumStyle()
        {
            ColoumWidth = DynamicReport.ColoumWidth;
        }
    }

    public enum TextAlign
    {
        Left,
        Center,
        Right
    }

      接下来就是主体部分了,先来定义一个空白的包含RDLC所需节点的xml文档来做模板,模板中用@XXX来表示相应的节点内容,比如@DataSets、@Tablix分别代表要设置的数据源中的数据表和<Body>中要显示的数据表格,后面会用传递进来的数据替换。
 

        protected string _docTemplate =
            "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
            "<Report xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition\">" +
            "<DataSources>" +
            "   &
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xgh815

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值