Winform 实现DataGridView自定义多维表头打印+自定义列宽+一维表头自定义换行

    哈哈,小弟不才,在前辈大牛的基础上做了多维表头打印,代码粗糙,凑合用,有时间再做优化!

public class PrintClass

    {
        #region  全局变量
        private Dictionary<int, List<MoreHead>> dicMoreHead = new Dictionary<int, List<MoreHead>>();
        private Dictionary<int, int> dicCelWidth;
        private string wLineStr = "\n";
        private DataGridView datagrid;
        private PrintDocument printdocument;
        private PageSetupDialog pagesetupdialog;
        private PrintPreviewDialog printpreviewdialog;
        private string title = "";//标题
        private string sPrintTime = "";//打印时间


        int currentpageindex = 0;//当前页的编号
        int rowcount = 0;//数据的行数
        int pagecount = 0;//打印页数
        int titlesize = 16;//标题的大小
        int xoffset = 0;//标题位置
        public int x = 0;//z绘画时的x轴位置
        public int PrintPageHeight = 1169;//打印的默认高度
        public int PrintPageWidth = 827;//打印的默认宽度
        public bool iseverypageprinttitle = false;//是否每一页都要打印标题
        public int headerheight = 30;//标题高度
        public int topmargin = 60; //顶边距 
        public int celltopmargin = 6;//单元格顶边距 
        public int cellleftmargin = 4;//单元格左边距 
        public int pagerowcount = 7;//每页行数 
        public int rowgap = 23;//行高 
        public int colgap = 5;//每列间隔 
        public int leftmargin = 50;//左边距 
        public Font titlefont = new Font("arial", 14);//标题字体 
        public Font font = new Font("arial", 10);//正文字体


        public Font footerfont = new Font("arial", 8);//页脚显示页数的字体
        public Font uplinefont = new Font("arial", 9, FontStyle.Bold);//当header分两行显示的时候,上行显示的字体
        public Font underlinefont = new Font("arial", 8);//当header分两行显示的时候,下行显示的字体
        public Brush brush = new SolidBrush(Color.Black);//画刷
        public Font headerfont = new Font("arial", 9, FontStyle.Bold);//列名标题字体
        public Brush brushHeaderFont = new SolidBrush(Color.Black);//列名字体画刷
        public Brush brushHeaderBack = new SolidBrush(Color.White);//列名背景画刷
        public Font Cellfont = new Font("arial", 9);//单元格字体
        public Brush brushCellFont = new SolidBrush(Color.Black);//单元格字体画刷
        public Brush brushCellBack = new SolidBrush(Color.White);//单元格背景画刷
        public bool isautopagerowcount = true;//是否自动计算行数
        public int buttommargin = 80;//底边距 
        public bool needprintpageindex = true;//是否打印页脚页数 
        public Color LineColor = Color.Black;//线的颜色
        public bool LineUP = true;//上边线
        public bool LineLeft = true;//左边线
        public bool LineUnit = true;//单元格的线
        public bool Boundary = false;//下边线


        public int AlignmentSgin = -1;//对齐方式的标识
        public int HAlignment = 0;//标题对齐方式
        public int UAlignment = 0;//单元格对齐方式
        public int LeftAlignment = 50;//左对齐的边界
        public int RightAlignment = 50;//右对齐的边界
        public int CenterAlignment = 0;//居中对齐边界
        public bool PageAspect = false;//打印的方向
        public static bool PageScape = false;//打印方向
        public int PageSheet = 0;
        /// <summary>
        /// 自定义列宽
        /// </summary>
        public Dictionary<int, int> DicCelWidth { get => dicCelWidth; set => dicCelWidth = value; }


        /// <summary>
        /// 自定义多维表头
        /// </summary>
        public Dictionary<int, List<MoreHead>> DicMoreHead { get => dicMoreHead; set => dicMoreHead = value; }


        /// <summary>
        /// 自定义换行符
        /// </summary>
        public string WLineStr { get => wLineStr; set => wLineStr = value; }
        #endregion


        #region  打印信息的初始化
        /// <summary>
        /// 打印信息的初始化
        /// </summary>
        /// <param datagrid="DataGridView">打印数据</param>
        /// <param title="string">打印标题</param>
        /// <param titlesize="int">标题大小</param>
        /// <param PageS="int">纸张大小</param>
        /// <param lendscape="bool">是否横向打印</param>
        /// <returns>返回DataSet对象</returns>
        public PrintClass(DataGridView datagrid, string title, int titlesize, int PageS, bool lendscape)
        {
            this.title = title;//设置标题的名称
            this.titlesize = titlesize;//设置标题的大小
            this.datagrid = datagrid;//获取打印数所据
            this.PageSheet = PageS;//纸张大小
            printdocument = new PrintDocument();//实例化PrintDocument类
            pagesetupdialog = new PageSetupDialog();//实例化PageSetupDialog类
            pagesetupdialog.Document = printdocument;//获取当前页的设置
            printpreviewdialog = new PrintPreviewDialog();//实例化PrintPreviewDialog类
            printpreviewdialog.Document = printdocument;//获取预览文档的信息
            printpreviewdialog.FormBorderStyle = FormBorderStyle.Fixed3D;//设置窗体的边框样式


            //横向打印的设置
            if (PageSheet >= 0)
            {
                if (lendscape == true)
                {
                    printdocument.DefaultPageSettings.Landscape = lendscape;//横向打印
                }
                else
                {
                    printdocument.DefaultPageSettings.Landscape = lendscape;//纵向打印
                }
            }
            pagesetupdialog.Document = printdocument;
            //MessageBox.Show(printdocument.DefaultPageSettings.Landscape.ToString());
            printdocument.PrintPage += new PrintPageEventHandler(this.printdocument_printpage);//事件的重载
        }


        /// <summary>
        /// 重载实例化打印类
        /// </summary>
        /// <param name="datagrid"></param>
        /// <param name="title"></param>
        /// <param name="sPrinterName"></param>
        /// <param name="lendscape"></param>
        public PrintClass(DataGridView datagrid, s
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值