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

    技术2022-05-19  20

    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>         /// <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);     }

    }


    最新回复(0)