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