Windows Develop Bookmark and Share   
 index > Windows Forms General > Is there an easy way to sent a DataGridView to the printer?
 

Is there an easy way to sent a DataGridView to the printer?

I have written a program that allows the user to enter data into a DataGridView that performs various calculations and error checking.

When they are done, I need to print the results.

I could loop through every row and every column using Graphic.Drawstring and do my own lines to make the grid seperating the cells.

I just wondered if there was a DataGridView method to send it to the printer that would greatly simplify the process.

JimGuyer  Tuesday, September 22, 2009 7:08 PM
Hi JimGuyer,

The thread below provides some methods to print a DataGridView:
http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/dc9d3acf-ccf8-457f-ba31-ef09fb357aee

Regards,
Aland Li
Please mark the replies as answers if they help and unmark if they don't. This can be beneficial to other community members reading the thread.
  • Marked As Answer byJimGuyer Friday, September 25, 2009 2:51 AM
  •  
Aland Li  Thursday, September 24, 2009 8:49 AM
If you are using datatable I hope this class helps, you need to use it with datasource of datagridview
http://www.codeproject.com/KB/cs/ExtendedDataTable.aspx
Tamer Oz  Tuesday, September 22, 2009 7:20 PM
Hi,

No there is no data source. Basically this a program to optimize cutting bars to length. They enter the length of the beams and the program calculates the most efficent cxut configuration. There is no data tobe read or saved.
JimGuyer  Tuesday, September 22, 2009 7:25 PM
I'm sorry at the moment I have no other idea. I'll keep thinking it. maybe modifiying p_print method saves you some time.
Tamer Oz  Tuesday, September 22, 2009 7:30 PM
The grid is formated to render on screen. I don't think your users like to see a scroll bar on the paper.
Draw the document by yourself.


The following is signature, not part of post
Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
Visual C++ MVP
Sheng Jiang 蒋晟  Tuesday, September 22, 2009 7:34 PM
Hi JimGuyer,

The thread below provides some methods to print a DataGridView:
http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/dc9d3acf-ccf8-457f-ba31-ef09fb357aee

Regards,
Aland Li
Please mark the replies as answers if they help and unmark if they don't. This can be beneficial to other community members reading the thread.
  • Marked As Answer byJimGuyer Friday, September 25, 2009 2:51 AM
  •  
Aland Li  Thursday, September 24, 2009 8:49 AM
The OP is already well on his way writing his own printing code.

Hans Passant.
nobugz  Thursday, September 24, 2009 11:40 AM
I got it done, and it works very well. It adjust size and alignment based on the grid.

public static void PrintGrid(PrintPageEventArgs ParmPrintPageEventArgs, DataGridView ParmDataGridView, float ParmX, float ParmY) {
    float GridWidth, GridHeight, ColumnX, ColumnY, CellX, CellY; 
    StringFormat GridStringFormat = new StringFormat(); StringFormat ColumnStringFormat = new StringFormat(); StringFormat CellStringFormat = new StringFormat();
    ParmPrintPageEventArgs.Graphics.DrawRectangle(new Pen(Color.Black), ParmX, ParmY, ParmDataGridView.Width, ParmDataGridView.Height);
    #region Draw Grid Lines
    GridWidth = 0; for (int EnumColumn = 0; EnumColumn < ParmDataGridView.ColumnCount; EnumColumn++) {GridWidth += ParmDataGridView.Columns[EnumColumn].Width;}//Determine GridWidth
    GridHeight = ParmDataGridView.ColumnHeadersHeight; for (int EnumRow = 0; EnumRow < ParmDataGridView.RowCount; EnumRow++) { GridHeight  += ParmDataGridView.Rows[EnumRow].Height;}//Dtermine Grid Height
         
    ParmPrintPageEventArgs.Graphics.DrawLine(new Pen(Color.Black), ParmX, ParmY, ParmX + GridWidth, ParmY);//Top Horizontal Edge
    ColumnY = ParmY + ParmDataGridView.ColumnHeadersHeight;
    ParmPrintPageEventArgs.Graphics.DrawLine(new Pen(Color.Black), ParmX, ColumnY, ParmX + GridWidth, ColumnY);//Horizontal Line under Column Headings
    for (int EnumRow = 0; EnumRow < ParmDataGridView.RowCount; EnumRow++) {//Horizontal Lines
        ColumnY += ParmDataGridView.Rows[EnumRow].Height;
        ParmPrintPageEventArgs.Graphics.DrawLine(new Pen(Color.Black), ParmX, ColumnY, ParmX + GridWidth, ColumnY);
    }

    ParmPrintPageEventArgs.Graphics.DrawLine(new Pen(Color.Black), ParmX, ParmY, ParmX, ParmY + GridHeight);// Left Vertical Edge
    ColumnX = ParmX; 
    for (int EnumColumn = 0; EnumColumn < ParmDataGridView.ColumnCount; EnumColumn++) {
        ColumnX += ParmDataGridView.Columns[EnumColumn].Width;
        ParmPrintPageEventArgs.Graphics.DrawLine(new Pen(Color.Black), ColumnX, ParmY, ColumnX, ParmY + GridHeight);
    }
    #endregion
    #region Write Grid Data
    #region Grid Alignment
    switch (ParmDataGridView.DefaultCellStyle.Alignment) {
        case DataGridViewContentAlignment.TopLeft: GridStringFormat.LineAlignment = StringAlignment.Near; GridStringFormat.Alignment = StringAlignment.Near; break;
        case DataGridViewContentAlignment.MiddleLeft: GridStringFormat.LineAlignment = StringAlignment.Center; GridStringFormat.Alignment = StringAlignment.Near; break;
        case DataGridViewContentAlignment.BottomLeft: GridStringFormat.LineAlignment = StringAlignment.Far; GridStringFormat.Alignment = StringAlignment.Near; break;
        case DataGridViewContentAlignment.TopCenter: GridStringFormat.Alignment = StringAlignment.Near; GridStringFormat.LineAlignment = StringAlignment.Center; break;
        case DataGridViewContentAlignment.MiddleCenter: GridStringFormat.Alignment = StringAlignment.Center; GridStringFormat.LineAlignment = StringAlignment.Center; break;
        case DataGridViewContentAlignment.BottomCenter: GridStringFormat.Alignment = StringAlignment.Far; GridStringFormat.LineAlignment = StringAlignment.Center; break;
        case DataGridViewContentAlignment.TopRight: GridStringFormat.Alignment = StringAlignment.Near; GridStringFormat.LineAlignment = StringAlignment.Far; break;
        case DataGridViewContentAlignment.MiddleRight: GridStringFormat.Alignment = StringAlignment.Center; GridStringFormat.LineAlignment = StringAlignment.Far; break;
        case DataGridViewContentAlignment.BottomRight: GridStringFormat.Alignment = StringAlignment.Far; GridStringFormat.LineAlignment = StringAlignment.Far; break;
    }
    #endregion
    ColumnX = ParmX; 
    for (int EnumColumn = 0; EnumColumn < ParmDataGridView.ColumnCount; EnumColumn++) {
        ColumnY = ParmY;
        #region Column Alignment
        switch (ParmDataGridView.Columns[EnumColumn].DefaultCellStyle.Alignment) {
            case DataGridViewContentAlignment.NotSet:ColumnStringFormat.LineAlignment = GridStringFormat.LineAlignment; ColumnStringFormat.Alignment = GridStringFormat.Alignment; break;
            case DataGridViewContentAlignment.TopLeft:ColumnStringFormat.LineAlignment = StringAlignment.Near; ColumnStringFormat.Alignment = StringAlignment.Near; break;
            case DataGridViewContentAlignment.MiddleLeft:ColumnStringFormat.LineAlignment = StringAlignment.Center; ColumnStringFormat.Alignment = StringAlignment.Near; break;
            case DataGridViewContentAlignment.BottomLeft:ColumnStringFormat.LineAlignment = StringAlignment.Far; ColumnStringFormat.Alignment = StringAlignment.Near; break;
            case DataGridViewContentAlignment.TopCenter:ColumnStringFormat.LineAlignment = StringAlignment.Near; ColumnStringFormat.Alignment = StringAlignment.Center; break;
            case DataGridViewContentAlignment.MiddleCenter:ColumnStringFormat.LineAlignment = StringAlignment.Center; ColumnStringFormat.Alignment = StringAlignment.Center; break;
            case DataGridViewContentAlignment.BottomCenter:ColumnStringFormat.LineAlignment = StringAlignment.Far; ColumnStringFormat.Alignment = StringAlignment.Center; break;
            case DataGridViewContentAlignment.TopRight:ColumnStringFormat.LineAlignment = StringAlignment.Near; ColumnStringFormat.Alignment = StringAlignment.Far; break;
            case DataGridViewContentAlignment.MiddleRight:ColumnStringFormat.LineAlignment = StringAlignment.Center; ColumnStringFormat.Alignment = StringAlignment.Far; break;
            case DataGridViewContentAlignment.BottomRight:ColumnStringFormat.LineAlignment = StringAlignment.Far; ColumnStringFormat.Alignment = StringAlignment.Far; break;
        }
        #endregion
        #region Cell X & Y
        CellX = ColumnX; CellY = ColumnY;
        if (ColumnStringFormat.LineAlignment == StringAlignment.Near) { CellY = ColumnY; }//Top
        if (ColumnStringFormat.LineAlignment == StringAlignment.Center) { CellY = ColumnY + ParmDataGridView.ColumnHeadersHeight / 2; }//Middle
        if (ColumnStringFormat.LineAlignment == StringAlignment.Far) { CellY = ColumnY +ParmDataGridView.ColumnHeadersHeight; }//Bottom
        if (ColumnStringFormat.Alignment == StringAlignment.Near) { CellX = ColumnX; }//Left
        if (ColumnStringFormat.Alignment == StringAlignment.Center) {CellX = ColumnX + ParmDataGridView.Columns[EnumColumn].Width / 2;}//Middle
        if (ColumnStringFormat.Alignment == StringAlignment.Far) { CellX = ColumnX + ParmDataGridView.Columns[EnumColumn].Width; }//Right
        #endregion
        ParmPrintPageEventArgs.Graphics.DrawString( Convert.ToString(ParmDataGridView.Columns[EnumColumn].HeaderText), new Font("Arial", 10F), Brushes.Black, CellX, CellY, ColumnStringFormat);
        ColumnY += ParmDataGridView.ColumnHeadersHeight;
        for (int EnumRow = 0; EnumRow < ParmDataGridView.RowCount; EnumRow++) {
            #region Cell Alignment
            switch (ParmDataGridView[EnumColumn, EnumRow].Style.Alignment) {
                case DataGridViewContentAlignment.NotSet: CellStringFormat.LineAlignment = ColumnStringFormat.LineAlignment; CellStringFormat.Alignment = ColumnStringFormat.Alignment; break;
                case DataGridViewContentAlignment.TopLeft: CellStringFormat.LineAlignment = StringAlignment.Near; CellStringFormat.Alignment = StringAlignment.Near; break;
                case DataGridViewContentAlignment.MiddleLeft: CellStringFormat.LineAlignment = StringAlignment.Center; CellStringFormat.Alignment = StringAlignment.Near; break;
                case DataGridViewContentAlignment.BottomLeft: CellStringFormat.LineAlignment = StringAlignment.Far; CellStringFormat.Alignment = StringAlignment.Near; break;
                case DataGridViewContentAlignment.TopCenter: CellStringFormat.LineAlignment = StringAlignment.Near; CellStringFormat.Alignment = StringAlignment.Center; break;
                case DataGridViewContentAlignment.MiddleCenter: CellStringFormat.LineAlignment = StringAlignment.Center; CellStringFormat.Alignment = StringAlignment.Center; break;
                case DataGridViewContentAlignment.BottomCenter: CellStringFormat.LineAlignment = StringAlignment.Far; CellStringFormat.Alignment = StringAlignment.Center; break;
                case DataGridViewContentAlignment.TopRight: CellStringFormat.LineAlignment = StringAlignment.Near; CellStringFormat.Alignment = StringAlignment.Far; break;
                case DataGridViewContentAlignment.MiddleRight: CellStringFormat.LineAlignment = StringAlignment.Center; CellStringFormat.Alignment = StringAlignment.Far; break;
                case DataGridViewContentAlignment.BottomRight: CellStringFormat.LineAlignment = StringAlignment.Far; CellStringFormat.Alignment = StringAlignment.Far; break;
            }
            #endregion
            #region Cell X & Y
            if (CellStringFormat.LineAlignment == StringAlignment.Near) { CellY = ColumnY; }//Top
            if (CellStringFormat.LineAlignment == StringAlignment.Center) { CellY = ColumnY + ParmDataGridView.Rows[EnumRow].Height / 2; }//Middle
            if (CellStringFormat.LineAlignment == StringAlignment.Far) { CellY = ColumnY + ParmDataGridView.Rows[EnumRow].Height; }//Bottom
            if (CellStringFormat.Alignment == StringAlignment.Near) { CellX = ColumnX; }//Left
            if (CellStringFormat.Alignment == StringAlignment.Center) { CellX = ColumnX + ParmDataGridView.Columns[EnumColumn].Width / 2; }//Middle
            if (CellStringFormat.Alignment == StringAlignment.Far) { CellX = ColumnX + ParmDataGridView.Columns[EnumColumn].Width; }//Right
            #endregion
            ParmPrintPageEventArgs.Graphics.DrawString(Convert.ToString(ParmDataGridView[EnumColumn, EnumRow].Value), new Font("Arial", 10F), Brushes.Black, CellX, CellY, CellStringFormat);
            ColumnY += ParmDataGridView.Rows[EnumRow].Height;
        }
        ColumnX += ParmDataGridView.Columns[EnumColumn].Width;
    }
    #endregion
}


JimGuyer  Monday, September 28, 2009 8:33 PM

You can use google to search for other answers

Custom Search

More Threads

• UserControl button click to pop up new form based on its parent.
• Changing border color of GroupBox
• Getting the reference to the containing Form for a component
• Time related program C#
• Thumbnail extraction techniques specially for XP and 2000
• windows media player audio problem
• How to select all the checkbox from datagrid when user click submit button
• ListView-Which event is called next
• How can I optimize a custom UI?
• how to convert byte array to bitmap in c#