Click here to Skip to main content
15,889,176 members
Home / Discussions / C#
   

C#

 
QuestionRemote powershell / WinRM to Server 2012 Pin
JD868-Dec-14 18:49
JD868-Dec-14 18:49 
SuggestionRe: Remote powershell / WinRM to Server 2012 Pin
Richard MacCutchan8-Dec-14 22:07
mveRichard MacCutchan8-Dec-14 22:07 
GeneralRe: Remote powershell / WinRM to Server 2012 Pin
JD869-Dec-14 3:19
JD869-Dec-14 3:19 
GeneralRe: Remote powershell / WinRM to Server 2012 Pin
Richard MacCutchan9-Dec-14 5:49
mveRichard MacCutchan9-Dec-14 5:49 
GeneralRe: Remote powershell / WinRM to Server 2012 Pin
JD8610-Dec-14 5:09
JD8610-Dec-14 5:09 
QuestionCreate a nested TreeView for Windows 8.1 app Pin
Bhola S. Parit8-Dec-14 18:20
Bhola S. Parit8-Dec-14 18:20 
AnswerRe: Create a nested TreeView for Windows 8.1 app Pin
BillWoodruff8-Dec-14 21:26
professionalBillWoodruff8-Dec-14 21:26 
Questionrtl gridview Pin
alireza.zahani8-Dec-14 3:36
alireza.zahani8-Dec-14 3:36 
hi i have Datagridview
and i want to print this
so
my language is Right to left
i use Printducument but is dosnt work
please help me
tanx
-----------------
C#
class PrintDGV
   {
       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 PrintTitle = "";  // 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 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;

       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
               FrmPrintOptions dlg = new FrmPrintOptions(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
           {

           }
       }

       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);
           }
       }

       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);
           }
       }

       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() + " of " +
               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);
       }
   }

AnswerRe: rtl gridview Pin
alireza.zahani8-Dec-14 3:46
alireza.zahani8-Dec-14 3:46 
GeneralRe: rtl gridview Pin
Blue_Boy8-Dec-14 5:26
Blue_Boy8-Dec-14 5:26 
AnswerRe: rtl gridview Pin
Eddy Vluggen8-Dec-14 8:05
professionalEddy Vluggen8-Dec-14 8:05 
Questionconvert NTP to UTC datetime Pin
Jassim Rahma8-Dec-14 1:31
Jassim Rahma8-Dec-14 1:31 
AnswerRe: convert NTP to UTC datetime Pin
Richard MacCutchan8-Dec-14 1:33
mveRichard MacCutchan8-Dec-14 1:33 
AnswerRe: convert NTP to UTC datetime Pin
BillWoodruff8-Dec-14 1:55
professionalBillWoodruff8-Dec-14 1:55 
QuestionDatagridview with tabcontrol in windows application Pin
Rahulmishra0117-Dec-14 19:07
Rahulmishra0117-Dec-14 19:07 
AnswerRe: Datagridview with tabcontrol in windows application Pin
syed shanu7-Dec-14 21:07
mvasyed shanu7-Dec-14 21:07 
Questionnavigation page control, library extention for c# winforms Pin
KasGuest7-Dec-14 18:00
KasGuest7-Dec-14 18:00 
QuestionRe: navigation page control, library extention for c# winforms Pin
Richard MacCutchan7-Dec-14 22:56
mveRichard MacCutchan7-Dec-14 22:56 
AnswerRe: navigation page control, library extention for c# winforms Pin
KasGuest8-Dec-14 22:53
KasGuest8-Dec-14 22:53 
GeneralRe: navigation page control, library extention for c# winforms Pin
Richard MacCutchan8-Dec-14 23:01
mveRichard MacCutchan8-Dec-14 23:01 
Question[SOLVED] Reading Process.StandardOutput from Echoprint Codegen.exe always returns empty string Pin
Ray415287-Dec-14 13:32
Ray415287-Dec-14 13:32 
AnswerRe: Reading Process.StandardOutput from Echoprint Codegen.exe always returns empty string Pin
BillWoodruff7-Dec-14 14:12
professionalBillWoodruff7-Dec-14 14:12 
GeneralRe: Reading Process.StandardOutput from Echoprint Codegen.exe always returns empty string Pin
Ray415287-Dec-14 15:36
Ray415287-Dec-14 15:36 
GeneralRe: Reading Process.StandardOutput from Echoprint Codegen.exe always returns empty string Pin
Ray415287-Dec-14 15:38
Ray415287-Dec-14 15:38 
GeneralRe: Reading Process.StandardOutput from Echoprint Codegen.exe always returns empty string Pin
BillWoodruff7-Dec-14 18:21
professionalBillWoodruff7-Dec-14 18:21 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.