|
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-ef09fb357aeeRegards, 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 - Unmarked As Answer byJimGuyer Friday, September 25, 2009 2:51 AM
- Marked As Answer byAland LiMSFT, ModeratorFriday, September 25, 2009 2:09 AM
-
| | 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-ef09fb357aeeRegards, 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 |
|