C# - DataTable To PrintPreviewDialog

This code snippet demonstrates how to draw a table from data in a DataTable using the PrintPreviewDialog and PrintDocument classes.
  1. DataTable dTable = new DataTable();
  2.  
  3. private void Form1_Load(object sender, EventArgs e)
  4. {
  5.         dTable.Columns.Add("Employee Id");
  6.         dTable.Columns.Add("First Name");
  7.         dTable.Columns.Add("Last Name");
  8.  
  9.         dTable.Rows.Add("1000", "John", "Smith");
  10.         dTable.Rows.Add("1001", "Suzan", "Baker");
  11.         dTable.Rows.Add("1002", "Jia", "Li");
  12.         dTable.Rows.Add("1003", "Ted", "Jones");
  13.         dTable.Rows.Add("1004", "Sonia", "Zahir");
  14.  
  15.         PrintDocument document = new PrintDocument();
  16.         document.PrintPage += new PrintPageEventHandler(document_PrintPage);
  17.  
  18.         PrintPreviewDialog ppDialog = new PrintPreviewDialog();
  19.         ppDialog.Document = document;
  20.         ppDialog.Show();
  21. }
  22.  
  23. void document_PrintPage(object sender, PrintPageEventArgs e)
  24. {
  25.         PrintDocument document = (PrintDocument)sender;
  26.         Graphics g = e.Graphics;
  27.  
  28.         Brush brush = new SolidBrush(Color.Black);
  29.         Pen pen = new Pen(brush);
  30.         Font font = new Font("Arial", 9);
  31.  
  32.         int x=0, y=0, width=150, height=30;
  33.  
  34.         foreach (DataColumn column in dTable.Columns)
  35.         {
  36.                 g.DrawRectangle(pen, x, y, width, height);
  37.                 SizeF size = g.MeasureString(column.ColumnName, font);
  38.                 float xPadding = (width - size.Width) / 2;
  39.  
  40.                 g.DrawString(column.ColumnName, font, brush, x + xPadding, y +5);
  41.                 x += width;
  42.         }
  43.  
  44.  
  45.         x = 0;
  46.         y += 30;
  47.         int columnCount = dTable.Columns.Count;
  48.  
  49.         foreach (DataRow row in dTable.Rows)
  50.         {
  51.                 for (int i=0; i < columnCount; i++)
  52.                 {
  53.                         g.DrawRectangle(pen, x, y, width, height);
  54.                         SizeF size = g.MeasureString(row[i].ToString(), font);
  55.                         float xPadding = (width - size.Width) / 2;
  56.  
  57.                         g.DrawString(row[i].ToString(), font, brush, x + xPadding, y + 5);
  58.                         x += width;
  59.                 }
  60.                 x = 0;
  61.                 y+=30;
  62.         }
  63. }

No comments:

Post a Comment