我正在尝试计算将从DataGridView打印的总页数。 一旦总列长度大于总打印区域,将打印新页面。 对于每个新页面,它将始终打印第0列,以便需要添加列宽以获得正确的计算。
到目前为止,我的目的似乎总是显示页码
//dgv = the DataGridView
//RectangleF printable_area = MarginBounds
float total_width = 0;
//grab the width of each column
for (int i = 0; i < dgv.ColumnCount; i++)
{
total_width += dgv.Columns[i].HeaderCell.Size.Width;
}
//divide the total width by the printable area's width
int pages = (int)Math.Ceiling(total_width / (printable_area.Size.Width));
//add to the total width the size of column 0 * the number of pages
total_width += dgv.Rows[0].Cells[0].Size.Width * pages;
//return the total number of pages that will be printed
return (int)Math.Ceiling(total_width / (printable_area.Size.Width));
答案 0 :(得分:0)
起初我以为你实际上会有超过必要的页数,因为你在计算中包含第一页的Column [0]两次(在我看来,变量i
应该从1开始),但后来我意识到这个计算
int pages = (int)Math.Ceiling(total_width / (printable_area.Size.Width));
将假设列可以分布在页面上。
假设您有4列,每列100个宽度。现在假设你的可打印区域的宽度为150.无视每页打印第一列的要求,这将给你3页,因为400/150是2.67,四舍五入到3.然而,你真正想要的,是4页,因为两列永远不能放在一页上,宽度50的额外“间隙”每页不可用。
这假设您不希望在每页上打印一半或部分列。如果这是你的意图,那么我看不出你的代码有什么进一步的错误