1.先創(chuàng)建一個(gè)類文件PrintDataGridView代碼如下:
雄縣網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),雄縣網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為雄縣上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的雄縣做網(wǎng)站的公司定做!using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Data;
using System.Data.SqlClient;
using System.Drawing.Printing;
using System.Windows.Forms;
namespace MyText
{
class PrintDataGridView
{
private static List
private static PageSetupDialog pageSetup =null;
private static int printRowCount = 0;
private static bool IsPrint = true;
private static bool IsRole = true;
private static int PoXTmp = 0;
private static int PoYTmp = 0;
private static int WidthTmp = 0;
private static int HeightTmp = 0;
private static int RowIndex = 0;
///
/// 打印DataGridView控件
///
/// DataGridView控件
/// 是否包括列標(biāo)題
/// 為 System.Drawing.Printing.PrintDocument.PrintPage 事件提供數(shù)據(jù)。
/// 起始X坐標(biāo)
/// 起始Y坐標(biāo)
public static void Print(DataGridView dataGridView, bool includeColumnText, PrintPageEventArgs eValue, ref int PoX, ref int PoY)
{
pageSetup = new PageSetupDialog();
pageSetup.PageSettings = eValue.PageSettings;
//pageSetup.Document;
pageSetup.ShowDialog();
try
{
if (PrintDataGridView.IsPrint)
{
PrintDataGridView.printRowCount = 0;
PrintDataGridView.IsPrint = false;
PrintDataGridView.DataGridViewCellVsList(dataGridView, includeColumnText);
if (PrintDataGridView.CellPrintList.Count==0)
return;
if (PoX > eValue.MarginBounds.Left)
PrintDataGridView.IsRole = true;
else
PrintDataGridView.IsRole = false;
PrintDataGridView.PoXTmp = PoX;
PrintDataGridView.PoYTmp = PoY;
PrintDataGridView.RowIndex = 0;
WidthTmp = 0;
HeightTmp = 0;
}
if (PrintDataGridView.printRowCount!=0)
{
if (IsRole)
{
PoX = PoXTmp = eValue.MarginBounds.Left;
PoY = PoYTmp = eValue.MarginBounds.Top;
}
else
{
PoX = PoXTmp;
PoY = PoYTmp;
}
}
while (PrintDataGridView.printRowCount < PrintDataGridView.CellPrintList.Count)
{
DataGridViewCellPrint CellPrint = CellPrintList[PrintDataGridView.printRowCount];
if (RowIndex == CellPrint.RowIndex)
PoX = PoX + WidthTmp;
else
{
PoX = PoXTmp;
PoY = PoY + HeightTmp;
if (PoY + HeightTmp > eValue.MarginBounds.Bottom)
{
HeightTmp = 0;
eValue.HasMorePages = true;
return;
}
}
using (SolidBrush solidBrush = new SolidBrush(CellPrint.BackColor))
{
RectangleF rectF1 = new RectangleF(PoX, PoY, CellPrint.Width, CellPrint.Height);
eValue.Graphics.FillRectangle(solidBrush, rectF1);
using (Pen pen = new Pen(Color.Black, 1))
eValue.Graphics.DrawRectangle(pen, Rectangle.Round(rectF1));
solidBrush.Color = CellPrint.ForeColor;
eValue.Graphics.DrawString(CellPrint.FormattedValue, CellPrint.Font, solidBrush, new Point(PoX + 2, PoY + 3));
}
WidthTmp = CellPrint.Width;
HeightTmp = CellPrint.Height;
RowIndex = CellPrint.RowIndex;
PrintDataGridView.printRowCount++;
}
PoY = PoY + HeightTmp;
eValue.HasMorePages = false;
PrintDataGridView.IsPrint = true;
}
catch(Exception ex)
{
eValue.HasMorePages = false;
PrintDataGridView.IsPrint = true;
throw ex;
}
}
///
/// 將DataGridView控件內(nèi)容轉(zhuǎn)變到 CellPrintList
///
/// DataGridView控件
/// 是否包括列標(biāo)題
private static void DataGridViewCellVsList(DataGridView dataGridView, bool includeColumnText)
{
CellPrintList.Clear();
try
{
int rowsCount = dataGridView.Rows.Count;
int colsCount = dataGridView.Columns.Count;
//最后一行是供輸入的行時(shí),不用讀數(shù)據(jù)。
if (dataGridView.Rows[rowsCount - 1].IsNewRow)
rowsCount--;
//包括列標(biāo)題
if (includeColumnText)
{
for (int columnsIndex = 0; columnsIndex < colsCount; columnsIndex++)
{
if (dataGridView.Columns[columnsIndex].Visible)
{
DataGridViewCellPrint CellPrint = new DataGridViewCellPrint();
CellPrint.FormattedValue = dataGridView.Columns[columnsIndex].HeaderText;
CellPrint.RowIndex = 0;
CellPrint.ColumnIndex = columnsIndex;
CellPrint.Font = dataGridView.Columns[columnsIndex].HeaderCell.Style.Font;
CellPrint.BackColor = Color.Orange;// dataGridView.ColumnHeadersDefaultCellStyle.BackColor;
CellPrint.ForeColor = dataGridView.ColumnHeadersDefaultCellStyle.ForeColor;
CellPrint.Width = dataGridView.Columns[columnsIndex].Width;
CellPrint.Height = dataGridView.ColumnHeadersHeight;
CellPrintList.Add(CellPrint);
}
}
}
//讀取單元格數(shù)據(jù)
for (int rowIndex = 0; rowIndex < rowsCount; rowIndex++)
{
for (int columnsIndex = 0; columnsIndex < colsCount; columnsIndex++)
{
if (dataGridView.Columns[columnsIndex].Visible)
{
DataGridViewCellPrint CellPrint = new DataGridViewCellPrint();
CellPrint.FormattedValue = dataGridView.Rows[rowIndex].Cells[columnsIndex].FormattedValue.ToString();
if (includeColumnText)
CellPrint.RowIndex = rowIndex + 1;//假如包括列標(biāo)題則從行號(hào)1開(kāi)始
else
CellPrint.RowIndex = rowIndex;
CellPrint.ColumnIndex = columnsIndex;
CellPrint.Font = dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.Font;
System.Drawing.Color TmpColor = System.Drawing.Color.Empty;
if (System.Drawing.Color.Empty != dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.BackColor)
TmpColor = dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.BackColor;
else if (System.Drawing.Color.Empty != dataGridView.Rows[rowIndex].DefaultCellStyle.BackColor)
TmpColor = dataGridView.Rows[rowIndex].DefaultCellStyle.BackColor;
else
TmpColor = dataGridView.DefaultCellStyle.BackColor;
CellPrint.BackColor = TmpColor;
TmpColor = System.Drawing.Color.Empty;
if (System.Drawing.Color.Empty != dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.ForeColor)
TmpColor = dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.ForeColor;
else if (System.Drawing.Color.Empty != dataGridView.Rows[rowIndex].DefaultCellStyle.ForeColor)
TmpColor = dataGridView.Rows[rowIndex].DefaultCellStyle.ForeColor;
else
TmpColor = dataGridView.DefaultCellStyle.ForeColor;
CellPrint.ForeColor = TmpColor;
CellPrint.Width = dataGridView.Columns[columnsIndex].Width;
CellPrint.Height = dataGridView.Rows[rowIndex].Height;
CellPrintList.Add(CellPrint);
}
}
}
}
catch { throw; }
}
private class DataGridViewCellPrint
{
private string _FormattedValue = "";
private int _RowIndex = -1;
private int _ColumnIndex = -1;
private System.Drawing.Color _ForeColor = System.Drawing.Color.Black;
private System.Drawing.Color _BackColor = System.Drawing.Color.White;
private int _Width = 100;
private int _Height = 23;
private System.Drawing.Font _Font = new System.Drawing.Font("宋體", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
///
/// 獲取或設(shè)置單元格的字體。
///
public System.Drawing.Font Font
{
set { if (null != value) _Font = value; }
get { return _Font; }
}
///
/// 獲取為顯示進(jìn)行格式化的單元格的值。
///
public string FormattedValue
{
set { _FormattedValue = value; }
get { return _FormattedValue; }
}
///
/// 獲取或設(shè)置列的當(dāng)前寬度 (以像素為單位)。默認(rèn)值為 100。
///
public int Width
{
set { _Width = value; }
get { return _Width; }
}
///
/// 獲取或設(shè)置列標(biāo)題行的高度(以像素為單位)。默認(rèn)值為 23。
///
public int Height
{
set { _Height = value; }
get { return _Height; }
}
///
/// 獲取或設(shè)置行號(hào)。
///
public int RowIndex
{
set { _RowIndex = value; }
get { return _RowIndex; }
}
///
/// 獲取或設(shè)置列號(hào)。
///
public int ColumnIndex
{
set { _ColumnIndex = value; }
get { return _ColumnIndex; }
}
///
/// 獲取或設(shè)置前景色。
///
public System.Drawing.Color ForeColor
{
set { _ForeColor = value; }
get { return _ForeColor; }
}
///
/// 獲取或設(shè)置背景色。
///
public System.Drawing.Color BackColor
{
set { _BackColor = value; }
get { return _BackColor; }
}
}
}
}
2.在窗體中添加PrintDocument和PriintPreviewDialog控件,同時(shí)將PriintPreviewDialog屬性中的Document屬性設(shè)為PrintDocument的名稱,否則不能實(shí)現(xiàn)打印。 再在窗體中添加一個(gè)按鈕,實(shí)現(xiàn)打印預(yù)覽功能。
雙擊PrintDocument其中的代碼如下:
private void PrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Font font = new Font("宋體", 12);
e.Graphics.DrawString("菜單信息", font, Brushes.Red, 400, 20);
e.Graphics.DrawString("時(shí)間" + DateTime.Now.ToLongDateString(), font, Brushes.Black, 20, 40);
int x = 10;
int y = 70;
PrintDataGridView.Print(dgvInfo2, true, e, ref x, ref y); //注意:PrintDataGridView該類位于上面所寫的業(yè)務(wù)邏輯層之中
}
打印預(yù)覽按鈕的單擊事件中的代碼如下:
private void btnPrint_Click(object sender, EventArgs e)
{
this.printPreviewDialog1.ShowDialog();
}
至此 運(yùn)行程序點(diǎn)打印就可以出現(xiàn)打印預(yù)覽
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。