public static void Print_GridView(GridView dgv1, string title) { CoolPrintPreviewDialog ppvw; try { // Getting GridView object to print dgv = dgv1; PrintTitle = title; // Getting all Coulmns Names in the GridView AvailableColumns.Clear(); foreach (GridColumn c in dgv.Columns) { if (!c.Visible) { continue; } AvailableColumns.Add(c.Caption); } // Showing the PrintOption Form PrintOptions dlg = new PrintOptions(AvailableColumns); //加载注册表中的内容 string itemNameInRegister = dgv.GetType().GUID.ToString(); string checkItems = RegistryHelper.GetValue(itemNameInRegister); if (!string.IsNullOrEmpty(checkItems)) { string[] items = checkItems.Split(','); dlg.SetCheckedItems(items); } dlg.PrintTitle = PrintTitle;//先赋值给对话框 if (dlg.ShowDialog() != DialogResult.OK) { return; } //保存选项内容 string selectedString = ""; List <string> selectedItems = dlg.GetCheckItems(); foreach (string item in selectedItems) { selectedString += string.Format("{0},", item); } selectedString = selectedString.Trim(','); RegistryHelper.SaveValue(itemNameInRegister, selectedString); PrintTitle = dlg.PrintTitle; PrintAllRows = dlg.PrintAllRows; FitToPageWidth = dlg.FitToPageWidth; SelectedColumns = dlg.GetSelectedColumns(); RowsPerPage = 0; ppvw = new CoolPrintPreviewDialog(); 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) { MessageDxUtil.ShowError(ex.Message); } finally { } }
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) { #region 第一页 foreach (GridColumn GridCol in dgv.Columns) { if (!GridCol.Visible) { continue; } // Skip if the current column not selected if (!PrintDGV.SelectedColumns.Contains(GridCol.Caption)) { 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.Caption, GridCol.AppearanceCell.Font, tmpWidth).Height) + 15; // Save width & height of headres and ColumnType ColumnLefts.Add(tmpLeft); ColumnWidths.Add(tmpWidth); ColumnTypes.Add(GridCol.ColumnType); tmpLeft += tmpWidth; } #endregion } // Printing Current Page, Row by Row while (RowPos <= dgv.RowCount - 1) { if ((!PrintAllRows && !CheckInArray(RowPos))) { RowPos++; continue; } CellHeight = dgv.RowHeight + 40; if (tmpTop + CellHeight >= e.MarginBounds.Height + e.MarginBounds.Top) { DrawFooter(e, RowsPerPage); NewPage = true; PageNo++; e.HasMorePages = true; return; } else { #region MyRegion if (NewPage) { // Draw Header e.Graphics.DrawString(PrintTitle, new Font(dgv.GridControl.Font, FontStyle.Bold), Brushes.Black, /*e.MarginBounds.Left*/ e.MarginBounds.Width / 2, e.MarginBounds.Top - e.Graphics.MeasureString(PrintTitle, new Font(dgv.GridControl.Font, FontStyle.Bold), e.MarginBounds.Width).Height - 13); String s = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToShortTimeString(); e.Graphics.DrawString(s, new Font(dgv.GridControl.Font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - e.Graphics.MeasureString(s, new Font(dgv.GridControl.Font, FontStyle.Bold), e.MarginBounds.Width).Width), e.MarginBounds.Top - e.Graphics.MeasureString(PrintTitle, new Font(new Font(dgv.GridControl.Font, FontStyle.Bold), FontStyle.Bold), e.MarginBounds.Width).Height - 13); // Draw Columns tmpTop = e.MarginBounds.Top; i = 0; foreach (GridColumn GridCol in dgv.Columns) { if (!GridCol.Visible) { continue; } if (!PrintDGV.SelectedColumns.Contains(GridCol.Caption)) { 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.Caption, GridCol.AppearanceCell.Font, new SolidBrush(Color.Black), new RectangleF((int)ColumnLefts[i], tmpTop, (int)ColumnWidths[i], HeaderHeight), StrFormat); i++; } NewPage = false; tmpTop += HeaderHeight; } #endregion #region MyRegion // Draw Columns Contents i = 0; string tempString = ""; foreach (GridColumn GridCol in dgv.Columns) { if (!GridCol.Visible) { continue; } if (!SelectedColumns.Contains(GridCol.Caption)) { continue; } tempString = dgv.GetRowCellDisplayText(RowPos, GridCol.FieldName); e.Graphics.DrawString(tempString, dgv.GridControl.Font, new SolidBrush(dgv.GridControl.ForeColor), new RectangleF((int)ColumnLefts[i], (float)tmpTop, (int)ColumnWidths[i], (float)CellHeight), StrFormat); #region MyRegion //string type = ColumnTypes[i].ToString(); //Console.WriteLine(type); //// For the TextBox Column //if (((Type) ColumnTypes[i]).Name == "GridViewTextBoxColumn" || // ((Type) ColumnTypes[i]).Name == "GridViewLinkColumn") //{ // e.Graphics.DrawString(tempString, 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 == "GridViewButtonColumn") //{ // 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 == "GridViewCheckBoxColumn") //{ // 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 == "GridViewComboBoxColumn") //{ // 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 == "GridViewImageColumn") //{ // 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)); //} #endregion // Drawing Cells Borders e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)ColumnLefts[i], tmpTop, (int)ColumnWidths[i], CellHeight)); i++; } #endregion 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) { MessageDxUtil.ShowError(ex.Message); } }