梦槐浔萱 2021-04-30 08:56 采纳率: 0%
浏览 216
已采纳

Winform下PrintDocument设置分页后一直在打印,表中一共245行数据,代码如下

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
  • 写回答

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测量血氧,找不到相关的代码。