C#编码中,打印预览DataGridView的一段代码,稍作了修改,可以实现。
2012-02-25 11:12
936 查看
/// <summary>
/// 打印预览DataGridView公共类
/// Coin
/// 传递参数DataGridView的实体对象
/// </summary>
public static class PrintDGV
{
#region 相关私有变量
private static StringFormat StrFormat; // Holds content of a TextBox Cell to write by DrawString
private static StringFormat StrFormatComboBox; // Holds content of a Boolean Cell to write by DrawImage
private static Button CellButton; // Holds the Contents of Button Cell
private static CheckBox CellCheckBox; // Holds the Contents of CheckBox Cell
private static ComboBox CellComboBox; // Holds the Contents of ComboBox Cell
private static int TotalWidth; // Summation of Columns widths
private static int RowPos; // Position of currently printing row
private static bool NewPage; // Indicates if a new page reached
private static int PageNo; // Number of pages to print
private static ArrayList ColumnLefts = new ArrayList(); // Left Coordinate of Columns
private static ArrayList ColumnWidths = new ArrayList(); // Width of Columns
private static ArrayList ColumnTypes = new ArrayList(); // DataType of Columns
private static int CellHeight; // Height of DataGrid Cell
private static int RowsPerPage; // Number of Rows per Page
private static System.Drawing.Printing.PrintDocument printDoc = new System.Drawing.Printing.PrintDocument(); // PrintDocumnet Object used for printing
//private static string PrintTi<mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:script
type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>tle = ""; // Header of pages
private static DataGridView dgv; // Holds DataGridView Object to print its contents
private static List<string> SelectedColumns = new List<string>(); // The Columns Selected by user to print.
private static List<string> AvailableColumns = new List<string>(); // All Columns avaiable in DataGrid
private static string PrintTitle; //Need to Print Titles
private static bool PrintAllRows = true; // True = print all rows, False = print selected rows
private static bool FitToPageWidth = true; // True = Fits selected columns to page width , False = Print columns as showed
private static int HeaderHeight = 0;
#endregion
/// <summary>
/// 打印预览DataGridView方法
/// </summary>
/// <param name="dgv1">DataGridView的实体对象</param>
public static void Print_DataGridView(DataGridView dgv1)
{
PrintPreviewDialog ppvw;
try
{
// Getting DataGridView object to print
dgv = dgv1;
// Getting all Coulmns Names in the DataGridView
AvailableColumns.Clear();
foreach (DataGridViewColumn c in dgv.Columns)
{
if (!c.Visible) continue;
AvailableColumns.Add(c.HeaderText);
}
// Showing the PrintOption Form
PrintOptions dlg = new PrintOptions(AvailableColumns);
if (dlg.ShowDialog() != DialogResult.OK) return;
PrintTitle = dlg.PrintTitle;
PrintAllRows = dlg.PrintAllRows;
FitToPageWidth = dlg.FitToPageWidth;
SelectedColumns = dlg.GetSelectedColumns();
RowsPerPage = 0;
ppvw = new PrintPreviewDialog();
ppvw.Document = printDoc;
// Showing the Print Preview Page
printDoc.BeginPrint += new System.Drawing.Printing.PrintEventHandler(PrintDoc_BeginPrint);
printDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(PrintDoc_PrintPage);
if (ppvw.ShowDialog() != DialogResult.OK)
{
printDoc.BeginPrint -= new System.Drawing.Printing.PrintEventHandler(PrintDoc_BeginPrint);
printDoc.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(PrintDoc_PrintPage);
return;
}
// Printing the Documnet
printDoc.Print();
printDoc.BeginPrint -= new System.Drawing.Printing.PrintEventHandler(PrintDoc_BeginPrint);
printDoc.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(PrintDoc_PrintPage);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
printDoc.Dispose();
}
}
/// <summary>
/// 触发开始执行打印时的相关事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void PrintDoc_BeginPrint(object sender,System.Drawing.Printing.PrintEventArgs e)
{
try
{
// Formatting the Content of Text Cell to print
StrFormat = new StringFormat();
StrFormat.Alignment = StringAlignment.Near;
StrFormat.LineAlignment = StringAlignment.Center;
StrFormat.Trimming = StringTrimming.EllipsisCharacter;
// Formatting the Content of Combo Cells to print
StrFormatComboBox = new StringFormat();
StrFormatComboBox.LineAlignment = StringAlignment.Center;
StrFormatComboBox.FormatFlags = StringFormatFlags.NoWrap;
StrFormatComboBox.Trimming = StringTrimming.EllipsisCharacter;
ColumnLefts.Clear();
ColumnWidths.Clear();
ColumnTypes.Clear();
CellHeight = 0;
RowsPerPage = 0;
// For various column types
CellButton = new Button();
CellCheckBox = new CheckBox();
CellComboBox = new ComboBox();
// Calculating Total Widths
TotalWidth = 0;
foreach (DataGridViewColumn GridCol in dgv.Columns)
{
if (!GridCol.Visible) continue;
if (!PrintDGV.SelectedColumns.Contains(GridCol.HeaderText)) continue;
TotalWidth += GridCol.Width;
}
PageNo = 1;
NewPage = true;
RowPos = 0;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 触发打印执行时的相关事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void PrintDoc_PrintPage(object sender,System.Drawing.Printing.PrintPageEventArgs e)
{
int tmpWidth, i;
int tmpTop = e.MarginBounds.Top;
int tmpLeft = e.MarginBounds.Left;
try
{
// Before starting first page, it saves Width & Height of Headers and CoulmnType
if (PageNo == 1)
{
foreach (DataGridViewColumn GridCol in dgv.Columns)
{
if (!GridCol.Visible) continue;
// Skip if the current column not selected
if (!PrintDGV.SelectedColumns.Contains(GridCol.HeaderText)) continue;
// Detemining whether the columns are fitted to page or not.
if (FitToPageWidth)
tmpWidth = (int)(Math.Floor((double)((double)GridCol.Width / (double)TotalWidth * (double)TotalWidth * ((double)e.MarginBounds.Width / (double)TotalWidth))));
else
tmpWidth = GridCol.Width;
HeaderHeight = (int)(e.Graphics.MeasureString(GridCol.HeaderText,GridCol.InheritedStyle.Font, tmpWidth).Height) + 11;
// Save width & height of headres and ColumnType
ColumnLefts.Add(tmpLeft);
ColumnWidths.Add(tmpWidth);
ColumnTypes.Add(GridCol.GetType());
tmpLeft += tmpWidth;
}
}
// Printing Current Page, Row by Row
while (RowPos <= dgv.Rows.Count - 1)
{
DataGridViewRow GridRow = dgv.Rows[RowPos];
if (GridRow.IsNewRow || (!PrintAllRows && !GridRow.Selected))
{
RowPos++;
continue;
}
CellHeight = GridRow.Height;
if (tmpTop + CellHeight >= e.MarginBounds.Height + e.MarginBounds.Top)
{
DrawFooter(e, RowsPerPage);
NewPage = true;
PageNo++;
e.HasMorePages = true;
return;
}
else
{
if (NewPage)
{
// Draw Header
e.Graphics.DrawString(PrintTitle, new Font(dgv.Font, FontStyle.Bold),
Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top -
e.Graphics.MeasureString(PrintTitle, new Font(dgv.Font,
FontStyle.Bold), e.MarginBounds.Width).Height - 13);
String s = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToShortTimeString();
e.Graphics.DrawString(s, new Font(dgv.Font, FontStyle.Bold),
Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width -
e.Graphics.MeasureString(s, new Font(dgv.Font,
FontStyle.Bold), e.MarginBounds.Width).Width), e.MarginBounds.Top -
e.Graphics.MeasureString(PrintTitle, new Font(new Font(dgv.Font,
FontStyle.Bold), FontStyle.Bold), e.MarginBounds.Width).Height - 13);
// Draw Columns
tmpTop = e.MarginBounds.Top;
i = 0;
foreach (DataGridViewColumn GridCol in dgv.Columns)
{
if (!GridCol.Visible) continue;
if (!PrintDGV.SelectedColumns.Contains(GridCol.HeaderText))
continue;
e.Graphics.FillRectangle(new SolidBrush(Color.LightGray),
new Rectangle((int)ColumnLefts[i], tmpTop,
(int)ColumnWidths[i], HeaderHeight));
e.Graphics.DrawRectangle(Pens.Black,
new Rectangle((int)ColumnLefts[i], tmpTop,
(int)ColumnWidths[i], HeaderHeight));
e.Graphics.DrawString(GridCol.HeaderText, GridCol.InheritedStyle.Font,
new SolidBrush(GridCol.InheritedStyle.ForeColor),
new RectangleF((int)ColumnLefts[i], tmpTop,
(int)ColumnWidths[i], HeaderHeight), StrFormat);
i++;
}
NewPage = false;
tmpTop += HeaderHeight;
}
// Draw Columns Contents
i = 0;
foreach (DataGridViewCell Cel in GridRow.Cells)
{
if (!Cel.OwningColumn.Visible) continue;
if (!SelectedColumns.Contains(Cel.OwningColumn.HeaderText))
continue;
// For the TextBox Column
if (((Type)ColumnTypes[i]).Name == "DataGridViewTextBoxColumn" ||
((Type)ColumnTypes[i]).Name == "DataGridViewLinkColumn")
{
e.Graphics.DrawString(Cel.Value.ToString(), Cel.InheritedStyle.Font,
new SolidBrush(Cel.InheritedStyle.ForeColor),
new RectangleF((int)ColumnLefts[i], (float)tmpTop,
(int)ColumnWidths[i], (float)CellHeight), StrFormat);
}
// For the Button Column
else if (((Type)ColumnTypes[i]).Name == "DataGridViewButtonColumn")
{
CellButton.Text = Cel.Value.ToString();
CellButton.Size = new Size((int)ColumnWidths[i], CellHeight);
Bitmap bmp = new Bitmap(CellButton.Width, CellButton.Height);
CellButton.DrawToBitmap(bmp, new Rectangle(0, 0,
bmp.Width, bmp.Height));
e.Graphics.DrawImage(bmp, new Point((int)ColumnLefts[i], tmpTop));
}
// For the CheckBox Column
else if (((Type)ColumnTypes[i]).Name == "DataGridViewCheckBoxColumn")
{
CellCheckBox.Size = new Size(14, 14);
CellCheckBox.Checked = (bool)Cel.Value;
Bitmap bmp = new Bitmap((int)ColumnWidths[i], CellHeight);
Graphics tmpGraphics = Graphics.FromImage(bmp);
tmpGraphics.FillRectangle(Brushes.White, new Rectangle(0, 0,
bmp.Width, bmp.Height));
CellCheckBox.DrawToBitmap(bmp,
new Rectangle((int)((bmp.Width - CellCheckBox.Width) / 2),
(int)((bmp.Height - CellCheckBox.Height) / 2),
CellCheckBox.Width, CellCheckBox.Height));
e.Graphics.DrawImage(bmp, new Point((int)ColumnLefts[i], tmpTop));
}
// For the ComboBox Column
else if (((Type)ColumnTypes[i]).Name == "DataGridViewComboBoxColumn")
{
CellComboBox.Size = new Size((int)ColumnWidths[i], CellHeight);
Bitmap bmp = new Bitmap(CellComboBox.Width, CellComboBox.Height);
CellComboBox.DrawToBitmap(bmp, new Rectangle(0, 0,
bmp.Width, bmp.Height));
e.Graphics.DrawImage(bmp, new Point((int)ColumnLefts[i], tmpTop));
e.Graphics.DrawString(Cel.Value.ToString(), Cel.InheritedStyle.Font,
new SolidBrush(Cel.InheritedStyle.ForeColor),
new RectangleF((int)ColumnLefts[i] + 1, tmpTop, (int)ColumnWidths[i]
- 16, CellHeight), StrFormatComboBox);
}
// For the Image Column
else if (((Type)ColumnTypes[i]).Name == "DataGridViewImageColumn")
{
Rectangle CelSize = new Rectangle((int)ColumnLefts[i],
tmpTop, (int)ColumnWidths[i], CellHeight);
Size ImgSize = ((Image)(Cel.FormattedValue)).Size;
e.Graphics.DrawImage((Image)Cel.FormattedValue,
new Rectangle((int)ColumnLefts[i] + (int)((CelSize.Width - ImgSize.Width) / 2),
tmpTop + (int)((CelSize.Height - ImgSize.Height) / 2),
((Image)(Cel.FormattedValue)).Width, ((Image)(Cel.FormattedValue)).Height));
}
// Drawing Cells Borders
e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)ColumnLefts[i],
tmpTop, (int)ColumnWidths[i], CellHeight));
i++;
}
tmpTop += CellHeight;
}
RowPos++;
// For the first page it calculates Rows per Page
if (PageNo == 1) RowsPerPage++;
}
if (RowsPerPage == 0) return;
// Write Footer (Page Number)
DrawFooter(e, RowsPerPage);
e.HasMorePages = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 打印描绘表格底部页数信息
/// </summary>
/// <param name="e"></param>
/// <param name="RowsPerPage"></param>
private static void DrawFooter(System.Drawing.Printing.PrintPageEventArgs e,int RowsPerPage)
{
double cnt = 0;
// Detemining rows number to print
if (PrintAllRows)
{
if (dgv.Rows[dgv.Rows.Count - 1].IsNewRow)
cnt = dgv.Rows.Count - 2; // When the DataGridView doesn't allow adding rows
else
cnt = dgv.Rows.Count - 1; // When the DataGridView allows adding rows
}
else
cnt = dgv.SelectedRows.Count;
// Writing the Page Number on the Bottom of Page
string PageNum = " 第 " + PageNo.ToString() + " 页,共 " + Math.Ceiling((double)(cnt / RowsPerPage)).ToString()+ " 页";
e.Graphics.DrawString(PageNum, dgv.Font, Brushes.Black,
e.MarginBounds.Left + (e.MarginBounds.Width -
e.Graphics.MeasureString(PageNum, dgv.Font,
e.MarginBounds.Width).Width) / 2, e.MarginBounds.Top +
e.MarginBounds.Height + 31);
}
}
//弹出打印窗口设置的窗体构造类
partial class PrintOptions
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.rdoSelectedRows = new System.Windows.Forms.RadioButton();
this.rdoAllRows = new System.Windows.Forms.RadioButton();
this.chkFitToPageWidth = new System.Windows.Forms.CheckBox();
this.lblTitle = new System.Windows.Forms.Label();
this.txtTitle = new System.Windows.Forms.TextBox();
this.gboxRowsToPrint = new System.Windows.Forms.GroupBox();
this.lblColumnsToPrint = new System.Windows.Forms.Label();
this.btnOK = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.chklst = new System.Windows.Forms.CheckedListBox();
this.gboxRowsToPrint.SuspendLayout();
this.SuspendLayout();
//
// rdoSelectedRows
//
this.rdoSelectedRows.AutoSize = true;
this.rdoSelectedRows.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rdoSelectedRows.Location = new System.Drawing.Point(91, 18);
this.rdoSelectedRows.Name = "rdoSelectedRows";
this.rdoSelectedRows.Size = new System.Drawing.Size(64, 17);
this.rdoSelectedRows.TabIndex = 1;
this.rdoSelectedRows.TabStop = true;
this.rdoSelectedRows.Text = "选择行";
this.rdoSelectedRows.UseVisualStyleBackColor = true;
//
// rdoAllRows
//
this.rdoAllRows.AutoSize = true;
this.rdoAllRows.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rdoAllRows.Location = new System.Drawing.Point(9, 18);
this.rdoAllRows.Name = "rdoAllRows";
this.rdoAllRows.Size = new System.Drawing.Size(64, 17);
this.rdoAllRows.TabIndex = 0;
this.rdoAllRows.TabStop = true;
this.rdoAllRows.Text = "全部行";
this.rdoAllRows.UseVisualStyleBackColor = true;
//
// chkFitToPageWidth
//
this.chkFitToPageWidth.AutoSize = true;
this.chkFitToPageWidth.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
this.chkFitToPageWidth.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.chkFitToPageWidth.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.chkFitToPageWidth.Location = new System.Drawing.Point(187, 72);
this.chkFitToPageWidth.Name = "chkFitToPageWidth";
this.chkFitToPageWidth.Size = new System.Drawing.Size(84, 18);
this.chkFitToPageWidth.TabIndex = 21;
this.chkFitToPageWidth.Text = "适应页宽";
this.chkFitToPageWidth.UseVisualStyleBackColor = true;
//
// lblTitle
//
this.lblTitle.AutoSize = true;
this.lblTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblTitle.Location = new System.Drawing.Point(184, 99);
this.lblTitle.Name = "lblTitle";
this.lblTitle.Size = new System.Drawing.Size(59, 13);
this.lblTitle.TabIndex = 20;
this.lblTitle.Text = "标题设置";
//
// txtTitle
//
this.txtTitle.AcceptsReturn = true;
this.txtTitle.Location = new System.Drawing.Point(184, 114);
this.txtTitle.Multiline = true;
this.txtTitle.Name = "txtTitle";
this.txtTitle.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txtTitle.Size = new System.Drawing.Size(176, 108);
this.txtTitle.TabIndex = 19;
//
// gboxRowsToPrint
//
this.gboxRowsToPrint.Controls.Add(this.rdoSelectedRows);
this.gboxRowsToPrint.Controls.Add(this.rdoAllRows);
this.gboxRowsToPrint.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.gboxRowsToPrint.Location = new System.Drawing.Point(184, 20);
this.gboxRowsToPrint.Name = "gboxRowsToPrint";
this.gboxRowsToPrint.Size = new System.Drawing.Size(173, 39);
this.gboxRowsToPrint.TabIndex = 18;
this.gboxRowsToPrint.TabStop = false;
this.gboxRowsToPrint.Text = "打印行范围";
//
// lblColumnsToPrint
//
this.lblColumnsToPrint.AutoSize = true;
this.lblColumnsToPrint.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblColumnsToPrint.Location = new System.Drawing.Point(8, 8);
this.lblColumnsToPrint.Name = "lblColumnsToPrint";
this.lblColumnsToPrint.Size = new System.Drawing.Size(98, 13);
this.lblColumnsToPrint.TabIndex = 17;
this.lblColumnsToPrint.Text = "选择要打印的列";
//
// btnOK
//
this.btnOK.BackColor = System.Drawing.SystemColors.Control;
this.btnOK.Cursor = System.Windows.Forms.Cursors.Default;
this.btnOK.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.btnOK.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(178)));
this.btnOK.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnOK.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.btnOK.Location = new System.Drawing.Point(184, 228);
this.btnOK.Name = "btnOK";
this.btnOK.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnOK.Size = new System.Drawing.Size(56, 23);
this.btnOK.TabIndex = 14;
this.btnOK.Text = "打印";
this.btnOK.UseVisualStyleBackColor = false;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// btnCancel
//
this.btnCancel.BackColor = System.Drawing.SystemColors.Control;
this.btnCancel.Cursor = System.Windows.Forms.Cursors.Default;
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.btnCancel.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(178)));
this.btnCancel.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnCancel.Location = new System.Drawing.Point(300, 228);
this.btnCancel.Name = "btnCancel";
this.btnCancel.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnCancel.Size = new System.Drawing.Size(56, 23);
this.btnCancel.TabIndex = 15;
this.btnCancel.Text = "取消";
this.btnCancel.UseVisualStyleBackColor = false;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// chklst
//
this.chklst.CheckOnClick = true;
this.chklst.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.chklst.FormattingEnabled = true;
this.chklst.Location = new System.Drawing.Point(8, 26);
this.chklst.Name = "chklst";
this.chklst.Size = new System.Drawing.Size(170, 214);
this.chklst.TabIndex = 13;
//
// PrintOptions
//
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(369, 259);
this.Controls.Add(this.chkFitToPageWidth);
this.Controls.Add(this.lblTitle);
this.Controls.Add(this.txtTitle);
this.Controls.Add(this.gboxRowsToPrint);
this.Controls.Add(this.lblColumnsToPrint);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.chklst);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "PrintOptions";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "打印设置";
this.Load += new System.EventHandler(this.PrintOptions_Load);
this.gboxRowsToPrint.ResumeLayout(false);
this.gboxRowsToPrint.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
internal System.Windows.Forms.RadioButton rdoSelectedRows;
internal System.Windows.Forms.RadioButton rdoAllRows;
internal System.Windows.Forms.CheckBox chkFitToPageWidth;
internal System.Windows.Forms.Label lblTitle;
internal System.Windows.Forms.TextBox txtTitle;
internal System.Windows.Forms.GroupBox gboxRowsToPrint;
internal System.Windows.Forms.Label lblColumnsToPrint;
protected System.Windows.Forms.Button btnOK;
protected System.Windows.Forms.Button btnCancel;
internal System.Windows.Forms.CheckedListBox chklst;
}
//打印设置窗口的后台执行代码
/// <summary>
/// 打印设置相关的弹出窗体类
/// Coin
/// </summary>
public partial class PrintOptions : Form
{
/// <summary>
/// 构造器
/// </summary>
public PrintOptions()
{
InitializeComponent();
}
//标题设置
public string PrintTitle
{
get { return txtTitle.Text; }
}
//是否打印全部行
public bool PrintAllRows
{
get { return rdoAllRows.Checked; }
}
//是否适应窗口宽度
public bool FitToPageWidth
{
get { return chkFitToPageWidth.Checked; }
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="availableFields">参数传递列的名称添加到控件里</param>
public PrintOptions(List<string> availableFields)
{
InitializeComponent();
foreach (string field in availableFields)
chklst.Items.Add(field,true);
}
/// <summary>
/// 窗体加载Load事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PrintOptions_Load(object sender, EventArgs e)
{
rdoAllRows.Checked = true;
chkFitToPageWidth.Checked = true;
}
/// <summary>
/// 打印按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOK_Click(object sender, EventArgs e)
{
if (chklst.CheckedItems.Count==0)
{
MessageBox.Show("请选择要要打印的列!");
return;
}
this.DialogResult = DialogResult.OK;
this.Close();
}
/// <summary>
/// 取消按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
/// <summary>
/// 获取选择的列的集合方法
/// </summary>
/// <returns></returns>
public List<string> GetSelectedColumns()
{
List<string> lst = new List<string>();
foreach (object item in chklst.CheckedItems)
lst.Add(item.ToString());
return lst;
}
}
以下是效果图片。
/// 打印预览DataGridView公共类
/// Coin
/// 传递参数DataGridView的实体对象
/// </summary>
public static class PrintDGV
{
#region 相关私有变量
private static StringFormat StrFormat; // Holds content of a TextBox Cell to write by DrawString
private static StringFormat StrFormatComboBox; // Holds content of a Boolean Cell to write by DrawImage
private static Button CellButton; // Holds the Contents of Button Cell
private static CheckBox CellCheckBox; // Holds the Contents of CheckBox Cell
private static ComboBox CellComboBox; // Holds the Contents of ComboBox Cell
private static int TotalWidth; // Summation of Columns widths
private static int RowPos; // Position of currently printing row
private static bool NewPage; // Indicates if a new page reached
private static int PageNo; // Number of pages to print
private static ArrayList ColumnLefts = new ArrayList(); // Left Coordinate of Columns
private static ArrayList ColumnWidths = new ArrayList(); // Width of Columns
private static ArrayList ColumnTypes = new ArrayList(); // DataType of Columns
private static int CellHeight; // Height of DataGrid Cell
private static int RowsPerPage; // Number of Rows per Page
private static System.Drawing.Printing.PrintDocument printDoc = new System.Drawing.Printing.PrintDocument(); // PrintDocumnet Object used for printing
//private static string PrintTi<mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:script
type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>tle = ""; // Header of pages
private static DataGridView dgv; // Holds DataGridView Object to print its contents
private static List<string> SelectedColumns = new List<string>(); // The Columns Selected by user to print.
private static List<string> AvailableColumns = new List<string>(); // All Columns avaiable in DataGrid
private static string PrintTitle; //Need to Print Titles
private static bool PrintAllRows = true; // True = print all rows, False = print selected rows
private static bool FitToPageWidth = true; // True = Fits selected columns to page width , False = Print columns as showed
private static int HeaderHeight = 0;
#endregion
/// <summary>
/// 打印预览DataGridView方法
/// </summary>
/// <param name="dgv1">DataGridView的实体对象</param>
public static void Print_DataGridView(DataGridView dgv1)
{
PrintPreviewDialog ppvw;
try
{
// Getting DataGridView object to print
dgv = dgv1;
// Getting all Coulmns Names in the DataGridView
AvailableColumns.Clear();
foreach (DataGridViewColumn c in dgv.Columns)
{
if (!c.Visible) continue;
AvailableColumns.Add(c.HeaderText);
}
// Showing the PrintOption Form
PrintOptions dlg = new PrintOptions(AvailableColumns);
if (dlg.ShowDialog() != DialogResult.OK) return;
PrintTitle = dlg.PrintTitle;
PrintAllRows = dlg.PrintAllRows;
FitToPageWidth = dlg.FitToPageWidth;
SelectedColumns = dlg.GetSelectedColumns();
RowsPerPage = 0;
ppvw = new PrintPreviewDialog();
ppvw.Document = printDoc;
// Showing the Print Preview Page
printDoc.BeginPrint += new System.Drawing.Printing.PrintEventHandler(PrintDoc_BeginPrint);
printDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(PrintDoc_PrintPage);
if (ppvw.ShowDialog() != DialogResult.OK)
{
printDoc.BeginPrint -= new System.Drawing.Printing.PrintEventHandler(PrintDoc_BeginPrint);
printDoc.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(PrintDoc_PrintPage);
return;
}
// Printing the Documnet
printDoc.Print();
printDoc.BeginPrint -= new System.Drawing.Printing.PrintEventHandler(PrintDoc_BeginPrint);
printDoc.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(PrintDoc_PrintPage);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
printDoc.Dispose();
}
}
/// <summary>
/// 触发开始执行打印时的相关事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void PrintDoc_BeginPrint(object sender,System.Drawing.Printing.PrintEventArgs e)
{
try
{
// Formatting the Content of Text Cell to print
StrFormat = new StringFormat();
StrFormat.Alignment = StringAlignment.Near;
StrFormat.LineAlignment = StringAlignment.Center;
StrFormat.Trimming = StringTrimming.EllipsisCharacter;
// Formatting the Content of Combo Cells to print
StrFormatComboBox = new StringFormat();
StrFormatComboBox.LineAlignment = StringAlignment.Center;
StrFormatComboBox.FormatFlags = StringFormatFlags.NoWrap;
StrFormatComboBox.Trimming = StringTrimming.EllipsisCharacter;
ColumnLefts.Clear();
ColumnWidths.Clear();
ColumnTypes.Clear();
CellHeight = 0;
RowsPerPage = 0;
// For various column types
CellButton = new Button();
CellCheckBox = new CheckBox();
CellComboBox = new ComboBox();
// Calculating Total Widths
TotalWidth = 0;
foreach (DataGridViewColumn GridCol in dgv.Columns)
{
if (!GridCol.Visible) continue;
if (!PrintDGV.SelectedColumns.Contains(GridCol.HeaderText)) continue;
TotalWidth += GridCol.Width;
}
PageNo = 1;
NewPage = true;
RowPos = 0;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 触发打印执行时的相关事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void PrintDoc_PrintPage(object sender,System.Drawing.Printing.PrintPageEventArgs e)
{
int tmpWidth, i;
int tmpTop = e.MarginBounds.Top;
int tmpLeft = e.MarginBounds.Left;
try
{
// Before starting first page, it saves Width & Height of Headers and CoulmnType
if (PageNo == 1)
{
foreach (DataGridViewColumn GridCol in dgv.Columns)
{
if (!GridCol.Visible) continue;
// Skip if the current column not selected
if (!PrintDGV.SelectedColumns.Contains(GridCol.HeaderText)) continue;
// Detemining whether the columns are fitted to page or not.
if (FitToPageWidth)
tmpWidth = (int)(Math.Floor((double)((double)GridCol.Width / (double)TotalWidth * (double)TotalWidth * ((double)e.MarginBounds.Width / (double)TotalWidth))));
else
tmpWidth = GridCol.Width;
HeaderHeight = (int)(e.Graphics.MeasureString(GridCol.HeaderText,GridCol.InheritedStyle.Font, tmpWidth).Height) + 11;
// Save width & height of headres and ColumnType
ColumnLefts.Add(tmpLeft);
ColumnWidths.Add(tmpWidth);
ColumnTypes.Add(GridCol.GetType());
tmpLeft += tmpWidth;
}
}
// Printing Current Page, Row by Row
while (RowPos <= dgv.Rows.Count - 1)
{
DataGridViewRow GridRow = dgv.Rows[RowPos];
if (GridRow.IsNewRow || (!PrintAllRows && !GridRow.Selected))
{
RowPos++;
continue;
}
CellHeight = GridRow.Height;
if (tmpTop + CellHeight >= e.MarginBounds.Height + e.MarginBounds.Top)
{
DrawFooter(e, RowsPerPage);
NewPage = true;
PageNo++;
e.HasMorePages = true;
return;
}
else
{
if (NewPage)
{
// Draw Header
e.Graphics.DrawString(PrintTitle, new Font(dgv.Font, FontStyle.Bold),
Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top -
e.Graphics.MeasureString(PrintTitle, new Font(dgv.Font,
FontStyle.Bold), e.MarginBounds.Width).Height - 13);
String s = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToShortTimeString();
e.Graphics.DrawString(s, new Font(dgv.Font, FontStyle.Bold),
Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width -
e.Graphics.MeasureString(s, new Font(dgv.Font,
FontStyle.Bold), e.MarginBounds.Width).Width), e.MarginBounds.Top -
e.Graphics.MeasureString(PrintTitle, new Font(new Font(dgv.Font,
FontStyle.Bold), FontStyle.Bold), e.MarginBounds.Width).Height - 13);
// Draw Columns
tmpTop = e.MarginBounds.Top;
i = 0;
foreach (DataGridViewColumn GridCol in dgv.Columns)
{
if (!GridCol.Visible) continue;
if (!PrintDGV.SelectedColumns.Contains(GridCol.HeaderText))
continue;
e.Graphics.FillRectangle(new SolidBrush(Color.LightGray),
new Rectangle((int)ColumnLefts[i], tmpTop,
(int)ColumnWidths[i], HeaderHeight));
e.Graphics.DrawRectangle(Pens.Black,
new Rectangle((int)ColumnLefts[i], tmpTop,
(int)ColumnWidths[i], HeaderHeight));
e.Graphics.DrawString(GridCol.HeaderText, GridCol.InheritedStyle.Font,
new SolidBrush(GridCol.InheritedStyle.ForeColor),
new RectangleF((int)ColumnLefts[i], tmpTop,
(int)ColumnWidths[i], HeaderHeight), StrFormat);
i++;
}
NewPage = false;
tmpTop += HeaderHeight;
}
// Draw Columns Contents
i = 0;
foreach (DataGridViewCell Cel in GridRow.Cells)
{
if (!Cel.OwningColumn.Visible) continue;
if (!SelectedColumns.Contains(Cel.OwningColumn.HeaderText))
continue;
// For the TextBox Column
if (((Type)ColumnTypes[i]).Name == "DataGridViewTextBoxColumn" ||
((Type)ColumnTypes[i]).Name == "DataGridViewLinkColumn")
{
e.Graphics.DrawString(Cel.Value.ToString(), Cel.InheritedStyle.Font,
new SolidBrush(Cel.InheritedStyle.ForeColor),
new RectangleF((int)ColumnLefts[i], (float)tmpTop,
(int)ColumnWidths[i], (float)CellHeight), StrFormat);
}
// For the Button Column
else if (((Type)ColumnTypes[i]).Name == "DataGridViewButtonColumn")
{
CellButton.Text = Cel.Value.ToString();
CellButton.Size = new Size((int)ColumnWidths[i], CellHeight);
Bitmap bmp = new Bitmap(CellButton.Width, CellButton.Height);
CellButton.DrawToBitmap(bmp, new Rectangle(0, 0,
bmp.Width, bmp.Height));
e.Graphics.DrawImage(bmp, new Point((int)ColumnLefts[i], tmpTop));
}
// For the CheckBox Column
else if (((Type)ColumnTypes[i]).Name == "DataGridViewCheckBoxColumn")
{
CellCheckBox.Size = new Size(14, 14);
CellCheckBox.Checked = (bool)Cel.Value;
Bitmap bmp = new Bitmap((int)ColumnWidths[i], CellHeight);
Graphics tmpGraphics = Graphics.FromImage(bmp);
tmpGraphics.FillRectangle(Brushes.White, new Rectangle(0, 0,
bmp.Width, bmp.Height));
CellCheckBox.DrawToBitmap(bmp,
new Rectangle((int)((bmp.Width - CellCheckBox.Width) / 2),
(int)((bmp.Height - CellCheckBox.Height) / 2),
CellCheckBox.Width, CellCheckBox.Height));
e.Graphics.DrawImage(bmp, new Point((int)ColumnLefts[i], tmpTop));
}
// For the ComboBox Column
else if (((Type)ColumnTypes[i]).Name == "DataGridViewComboBoxColumn")
{
CellComboBox.Size = new Size((int)ColumnWidths[i], CellHeight);
Bitmap bmp = new Bitmap(CellComboBox.Width, CellComboBox.Height);
CellComboBox.DrawToBitmap(bmp, new Rectangle(0, 0,
bmp.Width, bmp.Height));
e.Graphics.DrawImage(bmp, new Point((int)ColumnLefts[i], tmpTop));
e.Graphics.DrawString(Cel.Value.ToString(), Cel.InheritedStyle.Font,
new SolidBrush(Cel.InheritedStyle.ForeColor),
new RectangleF((int)ColumnLefts[i] + 1, tmpTop, (int)ColumnWidths[i]
- 16, CellHeight), StrFormatComboBox);
}
// For the Image Column
else if (((Type)ColumnTypes[i]).Name == "DataGridViewImageColumn")
{
Rectangle CelSize = new Rectangle((int)ColumnLefts[i],
tmpTop, (int)ColumnWidths[i], CellHeight);
Size ImgSize = ((Image)(Cel.FormattedValue)).Size;
e.Graphics.DrawImage((Image)Cel.FormattedValue,
new Rectangle((int)ColumnLefts[i] + (int)((CelSize.Width - ImgSize.Width) / 2),
tmpTop + (int)((CelSize.Height - ImgSize.Height) / 2),
((Image)(Cel.FormattedValue)).Width, ((Image)(Cel.FormattedValue)).Height));
}
// Drawing Cells Borders
e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)ColumnLefts[i],
tmpTop, (int)ColumnWidths[i], CellHeight));
i++;
}
tmpTop += CellHeight;
}
RowPos++;
// For the first page it calculates Rows per Page
if (PageNo == 1) RowsPerPage++;
}
if (RowsPerPage == 0) return;
// Write Footer (Page Number)
DrawFooter(e, RowsPerPage);
e.HasMorePages = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 打印描绘表格底部页数信息
/// </summary>
/// <param name="e"></param>
/// <param name="RowsPerPage"></param>
private static void DrawFooter(System.Drawing.Printing.PrintPageEventArgs e,int RowsPerPage)
{
double cnt = 0;
// Detemining rows number to print
if (PrintAllRows)
{
if (dgv.Rows[dgv.Rows.Count - 1].IsNewRow)
cnt = dgv.Rows.Count - 2; // When the DataGridView doesn't allow adding rows
else
cnt = dgv.Rows.Count - 1; // When the DataGridView allows adding rows
}
else
cnt = dgv.SelectedRows.Count;
// Writing the Page Number on the Bottom of Page
string PageNum = " 第 " + PageNo.ToString() + " 页,共 " + Math.Ceiling((double)(cnt / RowsPerPage)).ToString()+ " 页";
e.Graphics.DrawString(PageNum, dgv.Font, Brushes.Black,
e.MarginBounds.Left + (e.MarginBounds.Width -
e.Graphics.MeasureString(PageNum, dgv.Font,
e.MarginBounds.Width).Width) / 2, e.MarginBounds.Top +
e.MarginBounds.Height + 31);
}
}
//弹出打印窗口设置的窗体构造类
partial class PrintOptions
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.rdoSelectedRows = new System.Windows.Forms.RadioButton();
this.rdoAllRows = new System.Windows.Forms.RadioButton();
this.chkFitToPageWidth = new System.Windows.Forms.CheckBox();
this.lblTitle = new System.Windows.Forms.Label();
this.txtTitle = new System.Windows.Forms.TextBox();
this.gboxRowsToPrint = new System.Windows.Forms.GroupBox();
this.lblColumnsToPrint = new System.Windows.Forms.Label();
this.btnOK = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.chklst = new System.Windows.Forms.CheckedListBox();
this.gboxRowsToPrint.SuspendLayout();
this.SuspendLayout();
//
// rdoSelectedRows
//
this.rdoSelectedRows.AutoSize = true;
this.rdoSelectedRows.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rdoSelectedRows.Location = new System.Drawing.Point(91, 18);
this.rdoSelectedRows.Name = "rdoSelectedRows";
this.rdoSelectedRows.Size = new System.Drawing.Size(64, 17);
this.rdoSelectedRows.TabIndex = 1;
this.rdoSelectedRows.TabStop = true;
this.rdoSelectedRows.Text = "选择行";
this.rdoSelectedRows.UseVisualStyleBackColor = true;
//
// rdoAllRows
//
this.rdoAllRows.AutoSize = true;
this.rdoAllRows.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rdoAllRows.Location = new System.Drawing.Point(9, 18);
this.rdoAllRows.Name = "rdoAllRows";
this.rdoAllRows.Size = new System.Drawing.Size(64, 17);
this.rdoAllRows.TabIndex = 0;
this.rdoAllRows.TabStop = true;
this.rdoAllRows.Text = "全部行";
this.rdoAllRows.UseVisualStyleBackColor = true;
//
// chkFitToPageWidth
//
this.chkFitToPageWidth.AutoSize = true;
this.chkFitToPageWidth.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
this.chkFitToPageWidth.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.chkFitToPageWidth.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.chkFitToPageWidth.Location = new System.Drawing.Point(187, 72);
this.chkFitToPageWidth.Name = "chkFitToPageWidth";
this.chkFitToPageWidth.Size = new System.Drawing.Size(84, 18);
this.chkFitToPageWidth.TabIndex = 21;
this.chkFitToPageWidth.Text = "适应页宽";
this.chkFitToPageWidth.UseVisualStyleBackColor = true;
//
// lblTitle
//
this.lblTitle.AutoSize = true;
this.lblTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblTitle.Location = new System.Drawing.Point(184, 99);
this.lblTitle.Name = "lblTitle";
this.lblTitle.Size = new System.Drawing.Size(59, 13);
this.lblTitle.TabIndex = 20;
this.lblTitle.Text = "标题设置";
//
// txtTitle
//
this.txtTitle.AcceptsReturn = true;
this.txtTitle.Location = new System.Drawing.Point(184, 114);
this.txtTitle.Multiline = true;
this.txtTitle.Name = "txtTitle";
this.txtTitle.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txtTitle.Size = new System.Drawing.Size(176, 108);
this.txtTitle.TabIndex = 19;
//
// gboxRowsToPrint
//
this.gboxRowsToPrint.Controls.Add(this.rdoSelectedRows);
this.gboxRowsToPrint.Controls.Add(this.rdoAllRows);
this.gboxRowsToPrint.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.gboxRowsToPrint.Location = new System.Drawing.Point(184, 20);
this.gboxRowsToPrint.Name = "gboxRowsToPrint";
this.gboxRowsToPrint.Size = new System.Drawing.Size(173, 39);
this.gboxRowsToPrint.TabIndex = 18;
this.gboxRowsToPrint.TabStop = false;
this.gboxRowsToPrint.Text = "打印行范围";
//
// lblColumnsToPrint
//
this.lblColumnsToPrint.AutoSize = true;
this.lblColumnsToPrint.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblColumnsToPrint.Location = new System.Drawing.Point(8, 8);
this.lblColumnsToPrint.Name = "lblColumnsToPrint";
this.lblColumnsToPrint.Size = new System.Drawing.Size(98, 13);
this.lblColumnsToPrint.TabIndex = 17;
this.lblColumnsToPrint.Text = "选择要打印的列";
//
// btnOK
//
this.btnOK.BackColor = System.Drawing.SystemColors.Control;
this.btnOK.Cursor = System.Windows.Forms.Cursors.Default;
this.btnOK.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.btnOK.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(178)));
this.btnOK.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnOK.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.btnOK.Location = new System.Drawing.Point(184, 228);
this.btnOK.Name = "btnOK";
this.btnOK.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnOK.Size = new System.Drawing.Size(56, 23);
this.btnOK.TabIndex = 14;
this.btnOK.Text = "打印";
this.btnOK.UseVisualStyleBackColor = false;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// btnCancel
//
this.btnCancel.BackColor = System.Drawing.SystemColors.Control;
this.btnCancel.Cursor = System.Windows.Forms.Cursors.Default;
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.btnCancel.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(178)));
this.btnCancel.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnCancel.Location = new System.Drawing.Point(300, 228);
this.btnCancel.Name = "btnCancel";
this.btnCancel.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnCancel.Size = new System.Drawing.Size(56, 23);
this.btnCancel.TabIndex = 15;
this.btnCancel.Text = "取消";
this.btnCancel.UseVisualStyleBackColor = false;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// chklst
//
this.chklst.CheckOnClick = true;
this.chklst.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.chklst.FormattingEnabled = true;
this.chklst.Location = new System.Drawing.Point(8, 26);
this.chklst.Name = "chklst";
this.chklst.Size = new System.Drawing.Size(170, 214);
this.chklst.TabIndex = 13;
//
// PrintOptions
//
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(369, 259);
this.Controls.Add(this.chkFitToPageWidth);
this.Controls.Add(this.lblTitle);
this.Controls.Add(this.txtTitle);
this.Controls.Add(this.gboxRowsToPrint);
this.Controls.Add(this.lblColumnsToPrint);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.chklst);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "PrintOptions";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "打印设置";
this.Load += new System.EventHandler(this.PrintOptions_Load);
this.gboxRowsToPrint.ResumeLayout(false);
this.gboxRowsToPrint.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
internal System.Windows.Forms.RadioButton rdoSelectedRows;
internal System.Windows.Forms.RadioButton rdoAllRows;
internal System.Windows.Forms.CheckBox chkFitToPageWidth;
internal System.Windows.Forms.Label lblTitle;
internal System.Windows.Forms.TextBox txtTitle;
internal System.Windows.Forms.GroupBox gboxRowsToPrint;
internal System.Windows.Forms.Label lblColumnsToPrint;
protected System.Windows.Forms.Button btnOK;
protected System.Windows.Forms.Button btnCancel;
internal System.Windows.Forms.CheckedListBox chklst;
}
//打印设置窗口的后台执行代码
/// <summary>
/// 打印设置相关的弹出窗体类
/// Coin
/// </summary>
public partial class PrintOptions : Form
{
/// <summary>
/// 构造器
/// </summary>
public PrintOptions()
{
InitializeComponent();
}
//标题设置
public string PrintTitle
{
get { return txtTitle.Text; }
}
//是否打印全部行
public bool PrintAllRows
{
get { return rdoAllRows.Checked; }
}
//是否适应窗口宽度
public bool FitToPageWidth
{
get { return chkFitToPageWidth.Checked; }
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="availableFields">参数传递列的名称添加到控件里</param>
public PrintOptions(List<string> availableFields)
{
InitializeComponent();
foreach (string field in availableFields)
chklst.Items.Add(field,true);
}
/// <summary>
/// 窗体加载Load事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PrintOptions_Load(object sender, EventArgs e)
{
rdoAllRows.Checked = true;
chkFitToPageWidth.Checked = true;
}
/// <summary>
/// 打印按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnOK_Click(object sender, EventArgs e)
{
if (chklst.CheckedItems.Count==0)
{
MessageBox.Show("请选择要要打印的列!");
return;
}
this.DialogResult = DialogResult.OK;
this.Close();
}
/// <summary>
/// 取消按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
/// <summary>
/// 获取选择的列的集合方法
/// </summary>
/// <returns></returns>
public List<string> GetSelectedColumns()
{
List<string> lst = new List<string>();
foreach (object item in chklst.CheckedItems)
lst.Add(item.ToString());
return lst;
}
}
以下是效果图片。
相关文章推荐
- c#打印预览控件中实现用鼠标移动页面功能代码分享
- C#实现打印与打印预览功能的思路及代码
- 一段多编码兼容的 C# 网页读取关键代码
- C#实现打印与打印预览功能(转)
- 手动修改二进制文件,实现在代码区中添加自己的一段代码
- C#里实现DATAGRID的打印预览和打印
- C#实现,黑白照片的代码,联想可以实现老照片效果
- c#中实现打印指定页(特定页), 附原代码
- c#代码发送邮件,还可以实现群发
- 分享一段优雅的代码,测试编译通过。摘自《设计模式沉思录》,稍作修改,否则编译不过
- 基本上,把switch,用设计模式代替,肯定是bug和过度设计。想想,本来修改一个文件几行代码可以解决的问题,变成修改3-6个类才能实现一样的功能。不是傻是什么?
- C#勾选dataGridView中的CheckBox(可以多选)并把有修改的CheckBox值(1或者0)更新到数据库表A.列B中!
- 浅析C#打印和C#打印预览的实现
- JS 打印功能代码可实现打印预览、打印设置等
- 浅析C#打印和C#打印预览的实现
- C# DataGridView 代码实现选中一行数据
- 简单完整的代码,通过这个代码你将对RSA加密算法在Java中的实现方法有一个初步的了解,这个类,你可以直接使用,水平高的,就自己修改完善下代码。
- 如何在C#中实现DATAGRIDVIEW 数据打印
- c#实现打印功能,可以设置纸张大小,字体和颜色等
- C#实现打印与打印预览功能