您的位置:首页 > 编程语言 > C#

C# 通用表格打印 (接口)

2011-03-07 10:26 204 查看
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Drawing;

using System.Data;

namespace cyh.General

{

    /// <summary>

    /// 报表每个单元打印前事件

    /// </summary>

    /// <param name="sender">发生事件的对象</param>

    /// <param name="source">来源:1:页头 2:表头 3:表格 4:表脚 5:页脚 6:条码</param>

    /// <param name="PageIndex">当前页号</param>

    /// <param name="RowIndex">当前行号</param>

    /// <param name="Caption">标题</param>

    /// <param name="Field">绑定字段</param>

    /// <param name="Value">打印前值</param>

    public delegate void ReportUnitAfterPrint(object sender, ReportBandType source, int PageIndex, int RowIndex, string Caption, string Field, ref string Value, EventArgs e);

    /// <summary>

    /// 发生事件的来源:1:页头 2:表头 3:表格 4:表脚 5:页脚 6:条码

    /// </summary>

    public enum ReportBandType { PageHeader=1, TableHeader, TableDetail, TableFooter, PageFooder, BarCode };

   

    /// <summary>

    ///表格线的类型 1:三栏表,2:有边框的三栏,4:完全网格

    /// </summary>

    public enum ReportGridLine :int { Nothing=0, Three=1, Border=2,Full=4}

    /// <summary>

    /// 报表主体设置

    /// </summary>

    internal struct ReportMain

    {

        /// <summary>

        /// 打印机名

        /// </summary>

        public string printerName;

        /// <summary>

        /// 纸张大小

        /// </summary>

        public Size pageSize;

        /// <summary>

        /// 页边距

        /// </summary>

        public System.Drawing.Printing.Margins Margins;

        /// <summary>

        /// 获取或设置纸张类型(pageSize为空时有效)

        /// </summary>

        public System.Drawing.Printing.PaperKind PaperKind;

        /// <summary>

        /// 获取或设置每行高度(以0.1毫米为单位)

        /// </summary>

        public int DetailHeight;

        /// <summary>

        /// 获取或设置每页行数(0:自动计算)

        /// </summary>

        public int DetailRows;

        /// <summary>

        /// 获取或设置打印开始页

        /// </summary>

        public int BeginPage;

        /// <summary>

        /// 获取或设置打印结束页(0:最后一页)

        /// </summary>

        public int EndPage;

        /// <summary>

        /// 获取或设置打印方向

        /// </summary>

        public bool Landscape;

        /// <summary>

        /// 获取或设置表格线的类型

        ///   1:三栏表,2:有边框的三栏,4:完全网格

        /// </summary>

        public ReportGridLine GridLine;

        /// <summary>

        /// 表格对齐方式

        /// </summary>

        public StringAlignment Align;

        /// <summary>

        /// 根据行高度及行数计算纸长(true时DetailRows不能为0)

        /// </summary>

        public bool AutoPageHeight;

        /// <summary>

        /// 每页打印的小页数

        /// </summary>

        public int Pages;

    }

    /// <summary>

    /// 报表标题

    /// </summary>

    internal struct ReportTitle

    {

        /// <summary>

        /// 标题内空

        /// </summary>

        public string Caption;

        /// <summary>

        /// 页头或页脚

        /// </summary>

        public bool Header;

        /// <summary>

        /// 字体(宋体加粗四号)

        /// </summary>

        public Font Font;

        /// <summary>

        /// 对齐方式(ctlTableReport用)

        /// </summary>

        public StringAlignment TextAlignment;

        /// <summary>

        /// 对齐方式(ctlTableXReport用)

        /// </summary>

        public DevExpress.XtraPrinting.TextAlignment xTextAlignment;

        /// <summary>

        ///  标题的高度和宽度,若不定义便检测Caption,否则自换行

        /// </summary>

        public System.Drawing.Size size;

    }

    /// <summary>

    /// 报表各字段格式

    /// </summary>

    internal struct ReportField

    {

        /// <summary>

        /// 名称

        /// </summary>

        public string Name;

        /// <summary>

        /// 表格头标题

        /// </summary>

        public string Caption;

        /// <summary>

        /// 标题字体(宋体、小四)

        /// </summary>

        public Font HeaderFont;

        /// <summary>

        /// 绑定字段

        /// </summary>

        public string Field;

        /// <summary>

        /// 对齐方式

        /// </summary>

        public StringAlignment TextAlignment;

        /// <summary>

        /// 对齐方式(ctlTableXReport用)

        /// </summary>

        public DevExpress.XtraPrinting.TextAlignment xTextAlignment;

        /// <summary>

        /// 表格字体(宋体、小四)

        /// </summary>

        public Font DetailFont;

        /// <summary>

        /// 自动换行

        /// </summary>

        public bool WordWrap;

        /// <summary>

        /// 表格脚内容

        /// </summary>

        public string Bottom;

        /// <summary>

        /// 是否合计

        /// </summary>

        public bool Sum;

        /// <summary>

        /// 格式化字符串

        /// </summary>

        public string FormatString;

        /// <summary>

        /// 标题的高度和宽度,若不定义便检测Caption,否则自换行并居中

        /// </summary>

        public Size HeaderSize;

    }

    /// <summary>

    /// 设置条码打印

    /// </summary>

    internal struct ReportBarcode

    {

        /// <summary>

        /// 条码内容(A-Z,0-9)

        /// </summary>

        public string Text;

        /// <summary>

        /// 起点

        /// </summary>

        public Point pint;

        /// <summary>

        /// 大小

        /// </summary>

        public Size size;

        /// <summary>

        /// 是否显示文字

        /// </summary>

        public bool showText;

        /// <summary>

        /// 字段名

        /// </summary>

        public string Field;

    }

    /// <summary>

    /// 通用表格打印的接口

    /// </summary>

    public interface iTableReport

    {

         /// <summary>

        /// 定义报表主体同时创建报表

        /// </summary>

        /// <param name="DetailHeight">明细每行高度</param>

        /// <param name="DetailRows">每页行数(0:自动计算)</param>

        /// <param name="GridLine">表格线的类型 1:三栏表,2:有边框的三栏,4:完全网格</param>

        /// <param name="Align">表格对齐方向</param>

 
be8b
       /// <param name="Landscape">横向还是纵向打印</param>

        /// <param name="Margins">页的边距尺寸</param>

        /// <param name="PaperKind">标准的纸张大小(pageSize为空时有效)</param>

        /// <param name="pageSize">纸张大小(比PagerKind优先)</param>

        /// <param name="FromPage">起始页</param>

        /// <param name="ToPage">结束页(0:自动到最后一页)</param>

        /// <param name="printerName">打印机名(为空时用自动选择)</param>

        /// <param name="AutoPageHeight">根据行高度及行数计算纸长,不支持横向打印</param>

        /// <param name="Pages">每页的小页数</param>

        void SetReportMain(int DetailHeight, int DetailRows, ReportGridLine GridLine, StringAlignment Align, bool Landscape, System.Drawing.Printing.Margins Margins,

            System.Drawing.Printing.PaperKind PaperKind, Size pageSize, int FromPage, int ToPage, string printerName, bool AutoPageHeight, int Pages);

        /// <summary>

        /// 定义报表主体同时创建报表

        /// </summary>

        /// <param name="DetailHeight">明细每行高度</param>

        /// <param name="DetailRows">每页行数(0:自动计算)</param>

        /// <param name="GridLine">表格线的类型 1:三栏表,2:有边框的三栏,4:完全网格</param>

        /// <param name="pageSize">纸张大小(比PagerKind优先)</param>

        /// <param name="FromPage">起始页</param>

        /// <param name="printerName">打印机名(为空时用自动选择)</param>

        /// <param name="Pages">每页的小页数</param>

        void SetReportMain(int DetailHeight, int DetailRows, ReportGridLine GridLine,Size pageSize, int FromPage, string printerName, int Pages);

        /// <summary>

        /// 定义报表主体同时创建报表

        /// </summary>

        /// <param name="DetailHeight">明细每行高度</param>

        /// <param name="GridLine">表格线的类型 1:三栏表,2:有边框的三栏,4:完全网格</param>

        /// <param name="pageSize">纸张大小(比PagerKind优先)</param>

        /// <param name="FromPage">起始页</param>

        /// <param name="printerName">打印机名(为空时用自动选择)</param>

        void SetReportMain(int DetailHeight, ReportGridLine GridLine, Size pageSize, int FromPage, string printerName);

        /// <summary>

        /// 定义报表标题

        /// </summary>

        /// <param name="Caption">标题内容</param>

        /// <param name="Header">页头或页脚</param>

        /// <param name="Font">字体(宋体加粗四号)</param>

        /// <param name="TextAlignment">对齐方式</param>

        /// <param name="size"> 标题的高度和宽度,若不定义便检测Caption,否则自换行</param>

        void AddReportTitle(string Caption, bool Header, Font Font, StringAlignment TextAlignment, System.Drawing.Size size);       

       /// <summary>

        /// 定义报表标题

        /// </summary>

        /// <param name="Caption">标题内容</param>

        /// <param name="Header">页头或页脚</param>

        void AddReportTitle(string Caption, bool Header);

       

         /// <summary>

        /// 定义报表字段

        /// </summary>

        /// <param name="Caption">表格头标题</param>

        /// <param name="HeaderFont">标题字体(宋体、小四)</param>

        /// <param name="Field">绑定字段</param>

        /// <param name="TextAlignment">对齐方式</param>

        /// <param name="DetailFont"> 表格字体(宋体、小四)</param>

        /// <param name="WordWrap">自动换行</param>

        /// <param name="Bottom">表格脚内容</param>

        /// <param name="Sum">是否合计</param>

        /// <param name="FormatString">格式化字符串</param>

        /// <param name="HeaderSize">标题的高度和宽度,若不定义便检测Caption,否则自换行并居中</param>

        void AddReportField(string Caption, Font HeaderFont, string Field, StringAlignment TextAlignment, Font DetailFont

                        , bool WordWrap, string Bottom, bool Sum, string FormatString, Size HeaderSize);

        /// <summary>

        /// 定义报表字段

        /// </summary>

        /// <param name="Caption">表格头标题</param>

        /// <param name="Field">绑定字段</param>

        void AddReportField(string Caption, string Filed);

        /// <summary>

        /// 定义条码

        /// </summary>

        /// <param name="Text">条码内容(A-Z,0-9)</param>

        /// <param name="pint">起点</param>

        /// <param name="size">大小</param>

        /// <param name="showText">是否显示文字</param>

        /// <param name="Field">字段名</param>

        void SetReportBarCode(string Text, Point pint, Size size, bool showText, string Field);

        /// <summary>

        /// 报表每个单元打印前事件

        /// </summary>

        event ReportUnitAfterPrint UnitAfterPrint;

        /// <summary>

        /// 显示打印

        /// </summary>

        /// <returns></returns>

        void  ShowDialog();

       

        /// <summary>

        /// 显示打印

        /// </summary>

        /// <param name="owner"></param>

        /// <returns></returns>

        void ShowDialog(IWin32Window owner);

        /// <summary>

        /// 直接打印

        /// </summary>

        void Print();

        /// <summary>

        /// 数据源

        /// </summary>

        DataTable DataSource { get; set; }

        /// <summary>

        /// 自动页长时计算每页打印的行数

        /// </summary>

        /// <param name="rows">总行数</param>

        /// <param name="maxrow">充许每页打印最大行数</param>

        /// <returns></returns>

        int GetAutoRow(int rows, int maxrow);

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息