Привет, ребята. У меня есть WinForm с DataGridView
и некоторыми элементами управления.Я хочу напечатать определенные столбцы от этого DataGridView
до PrintDocument
.Я разработал формат счета с жестко закодированным заголовком, таким как Sr., Qty, Rate и т. Д.
Может быть достаточно данных для нескольких страниц, поэтому я хочу, чтобы этот заголовок отображался в верхней части каждой страницы, я также хочучтобы добавить номера страниц, после печати всех строк в конце страницы есть расчет итогов, скидок и подлежащих оплате счетов. Я хочу убедиться, что они отображаются в конце самой последней страницы.
РЕДАКТИРОВАТЬ : Мне удалось распечатать из выбранных столбцов, поскольку я учусь, я не знаю, будет ли это работать, кроме A4 или нет. Вещь, которую я хочу знать, что часть Bill Calculation
сработает после drawDataGridTab2()
, если в этой части много страницбудет печатать на последней странице в том же зелье?Если бы вы могли помочь мне понять это, как я могу сделать возможной печать, отличную от A4, без потери формата.Ниже я добавляю новый код формата Билла.
private void printDocumentTab2_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//Draw Header
////
Graphics graphic = e.Graphics;
Font font = new Font("Courier New", 12);
float fontHeight = font.GetHeight();
graphic.DrawString(txtSupplierTab2.Text, new Font("Courier New", 20), Brushes.Black, 20, 20);
graphic.DrawString(txtRichAddressTab2.Text, new Font("Courier New", 12), Brushes.Black, 20, 50);
graphic.DrawString(txtCityTab2.Text, new Font("Courier New", 12), Brushes.Black, 20, 105);
graphic.DrawString("Ph: " + txtContactTab2.Text, new Font("Courier New", 12), Brushes.Black, 20, 120);
graphic.DrawLine(new Pen(Color.Blue, 2), 0, 140, this.Width, 140);
//Call method to Draw Headers
drawHeaderTab2(new Font("Courier New", 12, FontStyle.Bold), graphic);
graphic.DrawLine(new Pen(Color.Blue, 2), 0, 165, this.Width, 165);
//Call method to Draw DataGrid
drawDataGridTab2(new Font("Courier New", 10, FontStyle.Bold), graphic);
//Bill Calucation
graphic.DrawLine(new Pen(Color.Blue, 2), 0, 900, this.Width, 900);
//Gross Total at the end of Bill
graphic.DrawString("Total", new Font("Courier New", 12), Brushes.DarkRed, 600, 905);
graphic.DrawString(txtGrossTotal_Tab2.Text, new Font("Courier New", 12), Brushes.DarkRed, 700, 905);
//Discount At the End of Bill
graphic.DrawString("Disc.", new Font("Courier New", 12), Brushes.DarkRed, 600, 925);
graphic.DrawString(txtGrossTotalDisc_Tab2.Text, new Font("Courier New", 12), Brushes.DarkRed, 700, 925);
//Payable at the end of the bill
graphic.DrawLine(new Pen(Color.Black, 1.5f), 600, 945, this.Width, 945);
graphic.DrawString("Payable", new Font("Courier New", 12), Brushes.DarkRed, 600, 945);
graphic.DrawString(lblGrandAmmount_Tab2.Text, new Font("Courier New", 12), Brushes.DarkRed, 700, 945);
}
Функция DrawHeader
private void drawHeaderTab2(Font font, Graphics g)
{
g.DrawString("Sr#", font, Brushes.Black, 20, 145);
string medicine = dataGridView1.Columns["medName"].HeaderText;
g.DrawString(medicine, font, Brushes.Black, 70, 145);
string qty = dataGridView1.Columns["purchasedQty"].HeaderText;
g.DrawString(qty, font, Brushes.Black, 500, 145);
string rate = dataGridView1.Columns["costPrice"].HeaderText;
g.DrawString(rate, font, Brushes.Black, 600, 145);
string amount = dataGridView1.Columns["grossTotal"].HeaderText;
g.DrawString(amount, font, Brushes.Black, 750, 145);
}
Функция DrawDataGridView
private void drawDataGridTab2(Font font, Graphics g)
{
int yCord = 170;
int y1 = 185;
int y2 = 185;
int rows = 1;
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
//g.DrawString(dr.ToString(), new Font("Courier New", 10), Brushes.Black, 10, 150);
g.DrawString(rows.ToString(), font, Brushes.Black, 20, yCord);
string medicine = dataGridView1.Rows[dr.Index].Cells["medName"].FormattedValue.ToString();
g.DrawString(medicine, font, Brushes.Black, 70, yCord);
string qty = dataGridView1.Rows[dr.Index].Cells["purchasedQty"].FormattedValue.ToString();
g.DrawString(qty, font, Brushes.Black, 500, yCord);
string rate = dataGridView1.Rows[dr.Index].Cells["costPrice"].FormattedValue.ToString();
g.DrawString(rate, font, Brushes.Black, 600, yCord);
string amount = dataGridView1.Rows[dr.Index].Cells["grossTotal"].FormattedValue.ToString();
g.DrawString(amount, font, Brushes.Black, 750, yCord);
g.DrawLine(new Pen(Color.Black, 1), 0, y1, this.Width, y2);
yCord += 15;
y1 += 15;
y2 += 15;
rows++;
}
}