以下这个打印程序在打印的时候在第一页的时候打印正确,是3行5列的打印纸,在分页的时候却出现问题,位置x,y发生错误,不和第一页一样位置打印了,请问我的程序分页错误吗?请高人帮我看看!
public PrtInfor(DataGridView dataGridView)
{
this.dataGridView = dataGridView;
printDocument = new PrintDocument();
printDocument.DefaultPageSettings.PaperSize = psLT;
printDocument.DefaultPageSettings.Landscape = false;//设置为横向
printDocument.PrintPage += new PrintPageEventHandler(this.printDocument_PrintPage);
} private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
rowCount = dataGridView.Rows.Count - 1;//行数
colCount = dataGridView.ColumnCount;//列数
x = leftMargin;
int z = 0;
for (; i <= rowCount; i++)
{
if (ThreeNumber(i / 4) == 0)
{
y = cardNumberH;
}
else if (ThreeNumber(i / 4) == 1)
{
y = 500;
if ((z <= 2) && (z > 0))
{
z += 1;
}
else if (z == 3)
{
z = 0;
}
else
{
x = 22;
z += 1;
}
}
else if (ThreeNumber(i / 4) == 2)
{
y = 901;
if ((z <= 3) && (z > 0))
{
z += 1;
}
else if (z == 4)
{
z = 0;
}
else
{
x = 22;
z += 1;
}
}
for (int j = 0; j < colCount; j++)
{
if (j == 0)
{
cellValue = dataGridView.Rows[i].Cells[j].Value.ToString();
//e.Graphics.DrawRectangle(Pens.White, x, y, dataGridView.Columns[j].Width, rowGap);
Point drawPoint = new Point(x, y);
e.Graphics.DrawString(cellValue, font, brush, drawPoint);
y += passwordH;//设置打印的每列高度
}
if (j == 1)
{
cellValue = dataGridView.Rows[i].Cells[j].Value.ToString();
//e.Graphics.DrawRectangle(Pens.White, x, y, dataGridView.Columns[j].Width, rowGap);
Point drawPoint = new Point(x, y);
e.Graphics.DrawString(cellValue, font, brush, drawPoint);
y += moneyH;//设置打印的每列高度
}
if (j == 2)
{
cellValue = dataGridView.Rows[i].Cells[j].Value.ToString();
//e.Graphics.DrawRectangle(Pens.White, x, y, dataGridView.Columns[j].Width, rowGap);
Point drawPoint = new Point(x, y);
e.Graphics.DrawString(cellValue, font, brush, drawPoint);
y += endDataH;//设置打印的每列高度
}
if (j == 3)
{
cellValue = dataGridView.Rows[i].Cells[j].Value.ToString();
//e.Graphics.DrawRectangle(Pens.White, x, y, dataGridView.Columns[j].Width, rowGap);
Point drawPoint = new Point(x, y);
e.Graphics.DrawString(cellValue, font, brush, drawPoint);
y += snH;//设置打印的每列高度
}
if (j == 4)
{
cellValue = dataGridView.Rows[i].Cells[j].Value.ToString();
//e.Graphics.DrawRectangle(Pens.White, x, y, dataGridView.Columns[j].Width, rowGap);
Point drawPoint = new Point(x, y);
e.Graphics.DrawString(cellValue, font, brush, drawPoint);
//y += 75;//设置打印的每列高度
}
}
x += 291; //设置打印的每列的宽度
if ((i + 1) % 12 == 0)
{
//允许多页打印
i++;
y = cardNumberH;
e.HasMorePages = true;
return;
} }
e.HasMorePages = false;
}
public PrtInfor(DataGridView dataGridView)
{
this.dataGridView = dataGridView;
printDocument = new PrintDocument();
printDocument.DefaultPageSettings.PaperSize = psLT;
printDocument.DefaultPageSettings.Landscape = false;//设置为横向
printDocument.PrintPage += new PrintPageEventHandler(this.printDocument_PrintPage);
} private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
rowCount = dataGridView.Rows.Count - 1;//行数
colCount = dataGridView.ColumnCount;//列数
x = leftMargin;
int z = 0;
for (; i <= rowCount; i++)
{
if (ThreeNumber(i / 4) == 0)
{
y = cardNumberH;
}
else if (ThreeNumber(i / 4) == 1)
{
y = 500;
if ((z <= 2) && (z > 0))
{
z += 1;
}
else if (z == 3)
{
z = 0;
}
else
{
x = 22;
z += 1;
}
}
else if (ThreeNumber(i / 4) == 2)
{
y = 901;
if ((z <= 3) && (z > 0))
{
z += 1;
}
else if (z == 4)
{
z = 0;
}
else
{
x = 22;
z += 1;
}
}
for (int j = 0; j < colCount; j++)
{
if (j == 0)
{
cellValue = dataGridView.Rows[i].Cells[j].Value.ToString();
//e.Graphics.DrawRectangle(Pens.White, x, y, dataGridView.Columns[j].Width, rowGap);
Point drawPoint = new Point(x, y);
e.Graphics.DrawString(cellValue, font, brush, drawPoint);
y += passwordH;//设置打印的每列高度
}
if (j == 1)
{
cellValue = dataGridView.Rows[i].Cells[j].Value.ToString();
//e.Graphics.DrawRectangle(Pens.White, x, y, dataGridView.Columns[j].Width, rowGap);
Point drawPoint = new Point(x, y);
e.Graphics.DrawString(cellValue, font, brush, drawPoint);
y += moneyH;//设置打印的每列高度
}
if (j == 2)
{
cellValue = dataGridView.Rows[i].Cells[j].Value.ToString();
//e.Graphics.DrawRectangle(Pens.White, x, y, dataGridView.Columns[j].Width, rowGap);
Point drawPoint = new Point(x, y);
e.Graphics.DrawString(cellValue, font, brush, drawPoint);
y += endDataH;//设置打印的每列高度
}
if (j == 3)
{
cellValue = dataGridView.Rows[i].Cells[j].Value.ToString();
//e.Graphics.DrawRectangle(Pens.White, x, y, dataGridView.Columns[j].Width, rowGap);
Point drawPoint = new Point(x, y);
e.Graphics.DrawString(cellValue, font, brush, drawPoint);
y += snH;//设置打印的每列高度
}
if (j == 4)
{
cellValue = dataGridView.Rows[i].Cells[j].Value.ToString();
//e.Graphics.DrawRectangle(Pens.White, x, y, dataGridView.Columns[j].Width, rowGap);
Point drawPoint = new Point(x, y);
e.Graphics.DrawString(cellValue, font, brush, drawPoint);
//y += 75;//设置打印的每列高度
}
}
x += 291; //设置打印的每列的宽度
if ((i + 1) % 12 == 0)
{
//允许多页打印
i++;
y = cardNumberH;
e.HasMorePages = true;
return;
} }
e.HasMorePages = false;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货