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));