会社のロゴを含む Windows フォームと、一連のレコード (例: 200 レコード) をリストするグリッドビューと、その下にテキスト ボックスとラベルのセットがあります。
すべてを印刷する方法はありますか。つまり、gridview レコードとテキスト ボックスとラベルを含むロゴはありますか?
ありがとう。
はい、これは可能です。正しい方向に進むには、まずフォームにPrintDocumentをドロップし、BeginPrintイベントとPrintPageイベントを接続する必要があります。これを機能させるには、印刷ではなくプレビューを印刷する必要があるため、DocumentプロパティがPrintDocumentを指すPrintPreviewDialogも必要になります。次に、以下を呼び出して、印刷プレビューを表示できます。
printPreviewDialog1.ShowDialog();
私は既存のアプリケーションから以下のコードを掘り出しました。
BeginPrintハンドラーでは、グリッドの全幅を計算して、印刷時にそれに応じて拡大縮小できるようにする必要があります。
totalWidth = 0;
foreach (DataGridViewColumn col in dataGridView1.Columns)
totalWidth += col.Width;
PrintPageハンドラーでは、最初に、以下のコードの行に沿って列見出しを印刷する必要があります。このコードをメインループ(下記)に含めて、すべてのページに列見出しを印刷することをお勧めします。
foreach (DataGridViewColumn col in dataGridView1.Columns)
{
e.Graphics.DrawString(col.HeaderText,
col.InheritedStyle.Font,
new SolidBrush(col.InheritedStyle.ForeColor),
new RectangleF(l, t, w, h),
format);
}
次に、各行を印刷できます。
while (row <= dataGridView1.Rows.Count - 1)
{
DataGridViewRow gridRow = dataGridView1.Rows[row];
{
foreach (DataGridViewCell cell in gridRow.Cells)
{
if (cell.Value != null)
{
if (cell is DataGridViewTextBoxCell)
e.Graphics.DrawString(cell.Value.ToString(),
cell.InheritedStyle.Font,
new SolidBrush(cell.InheritedStyle.ForeColor),
new RectangleF(l, t, w, h),
format);
else if (cell is DataGridViewImageCell)
e.Graphics.DrawImage((Image)cell.Value,
new RectangleF(l, t, w, h));
}
}
}
row++;
}
注意すべきいくつかのこと:
e.HasMorePages = true
ます。変数「row」は、次のページでどの行から開始するかを知るために使用されます。セルの境界線を印刷することをお勧めしますe.MarginBounds.Width / totalWidth
また、これは、各セルをスケーリングするためにセル幅を乗算する場所です。お役に立てれば。