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

更新时间:2023-06-17 21:42:33 阅读: 评论:0

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 pagetupdialog;
private PrintPreviewDialog printpreviewdialog;
private string title = "";//标题
private string sPrintTime = "";//打印时间
int currentpageindex = 0;//当前页的编号
int rowcount = 0;//数据的⾏数
int pagecount = 0;//打印页数
int titlesize = 16;//标题的⼤⼩
int xofft = 0;//标题位置
public int x = 0;//z绘画时的x轴位置
public int PrintPageHeight = 1169;//打印的默认⾼度
public int PrintPageWidth = 827;//打印的默认宽度
public bool iverypageprinttitle = fal;//是否每⼀页都要打印标题
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 = fal;//下边线
public int AlignmentSgin = -1;//对齐⽅式的标识
public int HAlignment = 0;//标题对齐⽅式
public int HAlignment = 0;//标题对齐⽅式
public int UAlignment = 0;//单元格对齐⽅式
public int LeftAlignment = 50;//左对齐的边界
public int RightAlignment = 50;//右对齐的边界
public int CenterAlignment = 0;//居中对齐边界
形单影只public bool PageAspect = fal;//打印的⽅向
public static bool PageScape = fal;//打印⽅向
public int PageSheet = 0;
/// <summary>
/// ⾃定义列宽
/// </summary>
public Dictionary<int, int> DicCelWidth { get => dicCelWidth; t => dicCelWidth = value; }
/
// <summary>
/// ⾃定义多维表头
/// </summary>
public Dictionary<int, List<MoreHead>> DicMoreHead { get => dicMoreHead; t => dicMoreHead = value; }
/// <summary>
/// ⾃定义换⾏符
/// </summary>
public string WLineStr { get => wLineStr; t => wLineStr = value; }
#endregion
#region  打印信息的初始化
/// <summary>
supercalifragilisticexpialidocious/// 打印信息的初始化
/// </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类
pagetupdialog = new PageSetupDialog();//实例化PageSetupDialog类
pagetupdialog.Document = printdocument;//获取当前页的设置
printpreviewdialog = new PrintPreviewDialog();//实例化PrintPreviewDialog类
printpreviewdialog.Document = printdocument;//获取预览⽂档的信息
printpreviewdialog.FormBorderStyle = FormBorderStyle.Fixed3D;//设置窗体的边框样式
//横向打印的设置
if (PageSheet >= 0)
{
if (lendscape == true)
{
printdocument.DefaultPageSettings.Landscape = lendscape;//横向打印
}
el
{
printdocument.DefaultPageSettings.Landscape = lendscape;//纵向打印
}
}
pagetupdialog.Document = printdocument;
/
/MessageBox.Show(printdocument.DefaultPageSettings.Landscape.ToString());
printdocument.PrintPage += new PrintPageEventHandler(this.printdocument_printpage);//事件的重载
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, string title, string sPrinterName = "", string sPrintTime = "", bool lendscape = fal)        {
PageScape = lendscape;
this.title = title;//设置标题的名称注册会计师成绩查询系统
this.sPrintTime = sPrintTime;//打印时间
this.titlesize = 16;//设置标题的⼤⼩
this.AlignmentSgin = 1;//居中对齐
this.datagrid = datagrid;//获取打印数据
//this.PageSheet = 0;//纸张⼤⼩A4
printdocument = new PrintDocument();//实例化PrintDocument类
pagetupdialog = new PageSetupDialog();//实例化PageSetupDialog类
pagetupdialog.Document = printdocument;//获取当前页的设置
printpreviewdialog = new PrintPreviewDialog();//实例化PrintPreviewDialog类
printpreviewdialog.Document = printdocument;//获取预览⽂档的信息
printpreviewdialog.FormBorderStyle = FormBorderStyle.Fixed3D;//设置窗体的边框样式
if (!string.IsNullOrEmpty(sPrinterName))
{
printdocument.PrinterSettings.PrinterName = sPrinterName;//设置打印机
}
//横向打印的设置
if (PageSheet >= 0)
{
if (lendscape == true)
{
printdocument.DefaultPageSettings.Landscape = lendscape;//横向打印
}
el
{
printdocument.DefaultPageSettings.Landscape = lendscape;//纵向打印
}
}
pagetupdialog.Document = printdocument;
//MessageBox.Show(printdocument.DefaultPageSettings.Landscape.ToString());
printdocument.PrintPage += new PrintPageEventHandler(this.printdocument_printpage);//事件的重载
}
#endregion
#region  纸张⼤⼩的设置
/// <summary>
///  纸张⼤⼩的设置
/// </summary>
/// <param n="int">纸张⼤⼩的编号</param>
/// <returns>返回string对象</returns>
public string Page_Size(int n)
{
string pageN = "";//纸张的名称
switch (n)
{
ca 1: { pageN = "A5"; PrintPageWidth = 583; PrintPageHeight = 827; break; }
ca 2: { pageN = "A6"; PrintPageWidth = 413; PrintPageHeight = 583; break; }
ca 3: { pageN = "B5(ISO)"; PrintPageWidth = 693; PrintPageHeight = 984; break; }
ca 4: { pageN = "B5(JIS)"; PrintPageWidth = 717; PrintPageHeight = 1012; break; }
ca 5: { pageN = "Double Post Card"; PrintPageWidth = 583; PrintPageHeight = 787; break; }banner什么意思
ca 6: { pageN = "Envelope #10"; PrintPageWidth = 412; PrintPageHeight = 950; break; }
ca 6: { pageN = "Envelope #10"; PrintPageWidth = 412; PrintPageHeight = 950; break; }
ca 7: { pageN = "Envelope B5"; PrintPageWidth = 693; PrintPageHeight = 984; break; }
ca 8: { pageN = "Envelope C5"; PrintPageWidth = 638; PrintPageHeight = 902; break; }
ca 9: { pageN = "Envelope DL"; PrintPageWidth = 433; PrintPageHeight = 866; break; }
ca 10: { pageN = "Envelope Monarch"; PrintPageWidth = 387; PrintPageHeight = 750; break; }                ca 11: { pageN = "ExeCutive"; PrintPageWidth = 725; PrintPageHeight = 1015; break; }
ca 12: { pageN = "Legal"; PrintPageWidth = 850; PrintPageHeight = 1400; break; }
ca 13: { pageN = "Letter"; PrintPageWidth = 850; PrintPageHeight = 1100; break; }
ca 14: { pageN = "Post Card"; PrintPageWidth = 394; PrintPageHeight = 583; break; }
ca 15: { pageN = "16K"; PrintPageWidth = 775; PrintPageHeight = 1075; break; }
ca 16: { pageN = "8.5x13"; PrintPageWidth = 850; PrintPageHeight = 1300; break; }
}
return pageN;//返回纸张的名
}
#endregion
#region  页边距的设置
/// <summary>
///  页边距的设置
/// </summary>
/// <param SetUp1="string[]">边距信息</param>
public void PrintSetUp(string[] SetUp1)
{
if (SetUp1[0] == "true")
东京大学学费{
topmargin = Int32.Par(SetUp1[1]);//顶边距
netsh
leftmargin = Int32.Par(SetUp1[2]);//左边距
buttommargin = Int32.Par(SetUp1[3]);//底边距
cyberxAlignmentSgin = -1;//设置对齐⽅式的标识
}
}
#endregion
#region  ⽂字的位置
/// <summary>innocently
///  ⽂字的位置
/// </summary>
/// <param CellW="int">单元格的宽度</param>
/
// <param StrW="int">⽂字的宽度</param>
/// <param colW="int">单元格的左边距</param>
/// <param Ali="int">对齐⽅式</param>
/// <returns>返回int对象</returns>
private int Alignment_Mode(int CellW, int StrW, int colW, int Ali)
{
int ALiW = 0;
switch (Ali)
{
ca 0://左对齐
{
ALiW = colW; //设置⽂字的左端位置
break;
}
ca 1://局中
{
ALiW = (int)((CellW - StrW) / 2);//设置⽂字的左端位置
break;
}
ca 2://右对齐
{
ALiW = CellW - StrW - colW;//设置⽂字的左端位置
break;
}
}
return ALiW;
return ALiW;
}
#endregion
#region  页的打印事件
/// <summary>
///  页的打印事件(主要⽤于绘制打印报表)
/// </summary>
private void printdocument_printpage(object nder, System.Drawing.Printing.PrintPageEventArgs e)
{
#region ⼀维表头换⾏若想实现多维表头+内容⾏的换⾏请遍历多维表头以及内容⾏:换⾏的个数*count,注意:对应遍历画线的地⽅也要做相应的修改
string str = wLineStr;
int count = 0;
for (int i = 0; i < datagrid.ColumnCount; i++)
{
string cellvalueTemp = string.Empty;
if (str == "'\r'" || str == "'\n'")
{
cellvalueTemp = datagrid.Columns[i].HeaderText;
}
el
{
cellvalueTemp = datagrid.Columns[i].HeaderText.Replace(str, "\n" + str);
}
if (cellvalueTemp.Contains('\r') || cellvalueTemp.Contains('\n'))
{
count = rowgap * (cellvalueTemp.Split(new char[] { '\r', '\n' }).Length - 1) - 15;//单元格信息的Y坐标
}
}
#endregion
int iHeadHeight = this.headerheight;
iHeadHeight = this.headerheight * (dicMoreHead.Count + 1) + count;
PrintPageWidth = e.PageBounds.Width;//获取打印线张的宽度
PrintPageHeight = e.PageBounds.Height;//获取打印线张的⾼度
if (this.isautopagerowcount)//⾃动计算页的⾏数
pagerowcount = (int)((PrintPageHeight - pmargin - titlesize - this.headerfont.Height - iHeadHeight - this.buttommargin) / wgap);//获取每页的            pagecount = (int)(rowcount / pagerowcount);//获取打印多少页
pagetupdialog.AllowOrientation = true;//启动打印页⾯对话框的⽅向部分
if (rowcount % pagerowcount > 0)//如果数据的⾏数⼤于页的⾏数
pagecount++;//页数加1
int colcount = 0;//记录数据的列数
int y = topmargin;//获取表格的顶边距
string cellvalue = "";//记录⽂本信息(列标题和单元格的⽂本信息)
int startrow = currentpageindex * pagerowcount;//设置打印的初始页数
int endrow = startrow + this.pagerowcount < rowcount ? startrow + pagerowcount : rowcount;//设置打印的最⼤页数
int currentpagerowcount = endrow - startrow;//获取打印页数
colcount = datagrid.ColumnCount;//获取打印数据的列数
x = leftmargin;//获取表格的左边距
#region 处理列宽
Dictionary<int, int> dicCelWd = new Dictionary<int, int>();
//默认列宽resolve
for (int j = 0; j < colcount; j++)
{
dicCelWd.Add(j, (int)datagrid.Columns[j].FillWeight);
}
//存在⾃定义列宽时
if (dicCelWidth != null)
{
mf是什么意思foreach (int skeys in dicCelWidth.Keys)

本文发布于:2023-06-17 21:42:33,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/978479.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:打印   设置   获取   表头   标题   页数   定义   数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图