int iTemp = 0;
/// <summary>
/// 绘制打印内容及位置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PrintDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.HasMorePages = false;
#region 绘制DataGridView的数据
//第一行数据y值
int y = 190;
//第一列数据x值
int x = 30;
//每一列最长字符串长度
int[] weight = new int[20];
#region 获取每列最长字符串字符长度
for (int i = 0; i < dgv_Upload.Columns.Count - 1; i++)
{
int temp = 0;
for (int j = 0; j < dgv_Upload.Rows.Count; j++)
{
if (dgv_Upload.Rows[j].Cells[i].Value.ToString().Length > temp)
{
temp = dgv_Upload.Rows[j].Cells[i].Value.ToString().Length;
}
else if (dgv_Upload.Columns[i].Name.ToString().Length > temp)
{
temp = dgv_Upload.Columns[i].Name.ToString().Length;
}
}
weight[i] = temp + 5;
}
#endregion
#region 绘制数据
//y = 190;
for (int i = iTemp; i < dgv_Upload.Rows.Count; i++)
{
for (int j = 0; j < dgv_Upload.Columns.Count - 1; j++)
{
if (i % 10 == 0)
{
e.HasMorePages = true;
iTemp = i;
break;
}
e.Graphics.DrawString(String.Format("{0}", dgv_Upload.Rows[i].Cells[j].Value.ToString()), new Font("微软雅黑", 5), Brushes.Black, new Point(x, y));
if (j == 2)
{
x += weight[j] * 5;
}
else
{
x += weight[j] * 4;
}
}
x = 30;
y += 15;
//if (printer1.DrawDataGridView(e.Graphics))
//{
// e.HasMorePages = true;//此时,系统会重新调用printDocument1_PrintPage方法
//}
//else
//{
// e.HasMorePages = false; //此时,系统不会再调用printDocument1_PrintPage方法
//}
iTemp = i;
}
#endregion
#endregion
Winform下PrintDocument设置分页后一直在打印,表中一共245行数据,代码如下
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 梦槐浔萱 2021-04-30 09:27关注
for (int i = iTemp; i < dgv_Upload.Rows.Count; i++) { for (int j = 0; j < dgv_Upload.Columns.Count - 1; j++) { if (i % 10 == 0 && i != 0) { e.HasMorePages = true; e.Graphics.DrawString(String.Format("{0}", dgv_Upload.Rows[i].Cells[j].Value.ToString()), new Font("微软雅黑", 5), Brushes.Black, new Point(x, y)); iTemp = i; iTemp++; x = 30; y += 15; return; } else { e.Graphics.DrawString(String.Format("{0}", dgv_Upload.Rows[i].Cells[j].Value.ToString()), new Font("微软雅黑", 5), Brushes.Black, new Point(x, y)); } if (j == 2) { x += weight[j] * 5; } else { x += weight[j] * 4; } } x = 30; y += 15; iTemp = i;
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂
- ¥15 wordpress 产品图片 GIF 没法显示
- ¥15 求三国群英传pl国战时间的修改方法
- ¥15 matlab代码代写,需写出详细代码,代价私
- ¥15 ROS系统搭建请教(跨境电商用途)
- ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。