0

予約のある DataGridView があるフォームを設定しました。現在、DataGridView を印刷できますが、表示されているものだけを印刷できるため、下にスクロールすることによってのみ表示されるデータは印刷されません。

印刷ボタンをクリックすると、すべて (スクロールして表示されるデータを含む) がページに印刷されるようにコードを変更するにはどうすればよいですか?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace project
{
    public partial class frmViewBookings : Form
    {
        public frmViewBookings()
        {
            InitializeComponent();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            Form3 mainpage = new Form3();
            mainpage.Show();
            this.Close();
        }

        private void frmViewBookings_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'usersDataSet1.Booking' table. You can move, or remove it, as needed.
            this.bookingTableAdapter.Fill(this.usersDataSet1.Booking);    
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            Bitmap bm = new Bitmap(this.dataGridView1.Width, this.dataGridView1.Height);
            this.dataGridView1.DrawToBitmap(bm, new Rectangle(0, 0, this.dataGridView1.Width, this.dataGridView1.Height));
            e.Graphics.DrawImage(bm, 0, 0);
        } 

        private void btnPrint_Click(object sender, EventArgs e)
        {
            printDocument1.Print();
        }
    }
}
4

1 に答える 1

2

あなたがしなければならないことは、印刷したいコントロールのサイズのダミーフォームを作成し、コントロールをダミーフォームに追加してフォームを表示し、コントロールをダミーに印刷することです。

これが私がそれをした方法です:

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    //Create bitmap
    Bitmap image = new Bitmap(dataGridView1.Width, dataGridView1.Height);
    //Create form
    Form f = new Form();
    //add datagridview to the form
    f.Controls.Add(dataGridView1);
    //set the size of the form to the size of the datagridview
    f.Size = dataGridView1.Size;
    //draw the datagridview to the bitmap
    dataGridView1.DrawToBitmap(image, new Rectangle(0, 0, dataGridView1.Width, dataGridView1.Height));
    //dispose the form
    f.Dispose();
    //print
    e.Graphics.DrawImage(image, 0, 0);
}
于 2013-04-07T00:29:57.780 に答える