![]() |
Desktop Development »
Grid & Data Controls »
Grid controls
Intermediate
DataGrid Printing Class V1.0bBy nashcontrolA DataGrid printing class. |
C#, Windows, .NET 1.0, .NET 1.1VS.NET2003, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||


The DataGrid control is one of the worst things to work with, yet very needed. The real problem about this control is printing the grid. This class supports RightToLeft printing, colored and aligned grid printing...
I had to do a project that supports RightToLeft grid printing, but all the printing classes I found just didn't do the job. So, I made a new one...
The main class is PrinterClass, it does the actual print. Grid is a class holding the DataGrid data, it's made of Cells and Headers. Cell represents a single cell in a grid with Location, Font Alignment etc. Header represents a single header cell (inherits Cell).
public Grid(DataGrid TheGrid)
{
try
{
//get the Data in the grid
DataTable TableGrid = (DataTable)TheGrid.DataSource;
//set number of rows
rows = TableGrid.Rows.Count;
//set number of columns
//first check if the grid has tablestyle and columnstyle
CreateColumnStyles(TheGrid,TableGrid);
if (TheGrid.TableStyles[TableGrid.TableName].GridColumnStyles.Count>0)
columns =
TheGrid.TableStyles[TableGrid.TableName].GridColumnStyles.Count;
//init number of columns to headers
Headers = new Header[Columns];
SetHeaders(TheGrid,TableGrid);
Cells = new Cell[Rows,Columns];
//Copy Cells
for (int i=0;i<Rows;i++)
{
for (int j=0;j<Columns;j++)
{
Cells[i,j] = new Cell(i, j, TheGrid.Font,
TheGrid.GetCellBounds(i,j), TheGrid[i,j].ToString());
}
}
//define grid colors
SetColors(TheGrid);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
private void PrintDataGrid(Graphics g)
{
StringFormat sf = new StringFormat();
//if we want to print the grid right to left
if (bRightToLeft)
{
CurrentX = PrintDoc.DefaultPageSettings.PaperSize.Width -
PrintDoc.DefaultPageSettings.Margins.Right;
sf.FormatFlags = StringFormatFlags.DirectionRightToLeft;
}
else
{
CurrentX = PrintDoc.DefaultPageSettings.Margins.Left;
}
for (int i=0;i<PrintGrid.Rows;i++)
{
for (int j=0;j<PrintGrid.Columns;j++)
{
//set cell alignment
switch (PrintGrid[i,j].Alignment)
{
//left
case HorizontalAlignment.Left:
sf.Alignment = StringAlignment.Near;
break;
//center
case HorizontalAlignment.Center:
sf.Alignment = StringAlignment.Center;
break;
//right
case HorizontalAlignment.Right:
sf.Alignment = StringAlignment.Far;
break;
}
//advance X according to order
if (bRightToLeft)
{
//draw the cell bounds (lines)
g.DrawRectangle(Pens.Black,CurrentX - PrintGrid[i,j].Width,
CurrentY,PrintGrid[i,j].Width,PrintGrid[i,j].Height);
//draw the cell text
g.DrawString(PrintGrid[i,j].Text,
PrintGrid[i,j].Font,Brushes.Black,
new RectangleF(CurrentX - PrintGrid[i,j].Width,
CurrentY, PrintGrid[i,j].Width,
PrintGrid[i,j].Height),sf);
//next cell
CurrentX -=PrintGrid[i,j].Width;
}
else
{
//draw the cell bounds (lines)
g.DrawRectangle(Pens.Black ,CurrentX,CurrentY,
PrintGrid[i,j].Width,PrintGrid[i,j].Height);
//draw the cell text
//Draw text by alignment
g.DrawString(PrintGrid[i,j].Text,PrintGrid[i,j].Font,
Brushes.Black, new RectangleF(CurrentX,CurrentY,
PrintGrid[i,j].Width,PrintGrid[i,j].Height),sf);
//next cell
CurrentX +=PrintGrid[i,j].Width;
}
}
//reset to beginning
if (bRightToLeft)
{
//right align
CurrentX = PrintDoc.DefaultPageSettings.PaperSize.Width -
PrintDoc.DefaultPageSettings.Margins.Right;
}
else
{
//left align
CurrentX = PrintDoc.DefaultPageSettings.Margins.Left;
}
//advance to next row
CurrentY = CurrentY + PrintGrid[i,0].Height;
}
}
WIDTH of the page, continue to next.
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 27 Feb 2006 Editor: Smitha Vijayan |
Copyright 2004 by nashcontrol Everything else Copyright © CodeProject, 1999-2009 Web20 | Advertise on the Code Project |