Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Stampanje DataGridView-a???

[es] :: .NET :: Stampanje DataGridView-a???

[ Pregleda: 3392 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Leopold13
Srbija

Član broj: 162262
Poruke: 16
217.169.219.*



Profil

icon Stampanje DataGridView-a???13.11.2007. u 08:05 - pre 200 meseci
Imam problem oko stampanja DataGrid-a. Naime na Formu je prevucena rtabela iz DataSet-a u DataGridView-u i problem je sledeci kada zelim da odstampam tabelu (DataGrid) stampac povuce papir ali se niste ne odstampa (znaci papir kakav udje u stampac takav i izadje). Kako da resim ovaj problem? Ispod je deo koda za koji smatram da mu nesto fali. STA?
Ako neko zna kako da ovo resim neka bude precizan sta i kako sve treba da odradim.
Hvala svima na pomoci...
P.S. Koristim Microsoft Visual C# 2005 Express Edition
P.P.S. Moj mail je [email protected] pa mozete slati resenja i na mail

HVALA JOS JEDNOM



private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
PaintEventArgs myPaintArgs = new PaintEventArgs(e.Graphics, new Rectangle(new Point(0, 0), this.Size));
this.InvokePaint(racunDataGridView, myPaintArgs);
}

private void štampajToolStripMenuItem_Click(object sender, EventArgs e)
{
PrintDialog dlgPrint = new PrintDialog();
PrintDocument docPrint = new PrintDocument();
dlgPrint.Document = docPrint;
dlgPrint.ShowDialog();
docPrint.Print();
}
 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
*.adsl.net.t-com.hr.



+19 Profil

icon Re: Stampanje DataGridView-a???13.11.2007. u 17:11 - pre 200 meseci
na www.code-project.com imas ovo riješeno, pa potraži.
i za datagrid i za datagridview.

ovo šta pitaš, je dosta teško izvesti.
jer moraš paziti na broj stupaca, broje redaka, kad dođe do kraja na papirz da se prebaci na novu sranicu.itd..
 
Odgovor na temu

Leopold13
Srbija

Član broj: 162262
Poruke: 16
217.169.219.*



Profil

icon Re: Stampanje DataGridView-a???16.11.2007. u 08:39 - pre 200 meseci
Ovde ima brdo linkova... Moze mala pomoc - koji je onaj pravi?
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.adsl-2.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Stampanje DataGridView-a???16.11.2007. u 19:14 - pre 200 meseci
Evo kako sam ja uradio( naravno uz pomoć ekipe sa ES-a ).
Konvertuješ prvo podatke u XML( ima funkcija za ovo u DataAdapter klasi) i onda taj fajl konvertuješ pomoću XSL-a u HTML. Onda otvoriš taj HTML fajl u browseru i imaš sva podešavanja za štampanje koja imaš i u browseru.


 
Odgovor na temu

Leopold13
Srbija

Član broj: 162262
Poruke: 16
77.46.212.*



Profil

icon Re: Stampanje DataGridView-a???17.11.2007. u 23:43 - pre 200 meseci
Sve je to lepo... samo ima jedan problem - ja bas i nisam nesto preterano vican u radu sa C# i nov sam u toj prici . Ako bi mi objasnio korak po korak mozda bih i uspeo nesto da odradim. HVALA
 
Odgovor na temu

Leopold13
Srbija

Član broj: 162262
Poruke: 16
217.169.219.*



Profil

icon Re: Stampanje DataGridView-a???19.11.2007. u 10:58 - pre 200 meseci
Odradi sam na sasvim drugi nacin... Ipak, HVALA onima koji su se potrudili da mi pomognu...
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.adsl-1.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Stampanje DataGridView-a???19.11.2007. u 13:22 - pre 200 meseci
Deder, podeli sa nama kako si to uradio
 
Odgovor na temu

Leopold13
Srbija

Član broj: 162262
Poruke: 16
217.169.219.*



Profil

icon Re: Stampanje DataGridView-a???26.11.2007. u 11:29 - pre 199 meseci
dodaje se novi fajl u projekat tipa Code File i otprilike izgleda ovako:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;
using System.Collections;
using System.Data;
using System.Text;

namespace EvidencijaRacuna
{
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
PrintOptions dlg = new PrintOptions(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, tmpTop,
(int)ColumnWidths, HeaderHeight));

e.Graphics.DrawRectangle(Pens.Black,
new Rectangle((int) ColumnLefts, tmpTop,
(int)ColumnWidths, HeaderHeight));

e.Graphics.DrawString(GridCol.HeaderText, GridCol.InheritedStyle.Font,
new SolidBrush(GridCol.InheritedStyle.ForeColor),
new RectangleF((int)ColumnLefts, tmpTop,
(int)ColumnWidths, 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).Name == "DataGridViewTextBoxColumn" ||
((Type) ColumnTypes).Name == "DataGridViewLinkColumn")
{
e.Graphics.DrawString(Cel.Value.ToString(), Cel.InheritedStyle.Font,
new SolidBrush(Cel.InheritedStyle.ForeColor),
new RectangleF((int)ColumnLefts, (float)tmpTop,
(int)ColumnWidths, (float)CellHeight), StrFormat);
}
// For the Button Column
else if (((Type) ColumnTypes).Name == "DataGridViewButtonColumn")
{
CellButton.Text = Cel.Value.ToString();
CellButton.Size = new Size((int)ColumnWidths, 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, tmpTop));
}
// For the CheckBox Column
else if (((Type) ColumnTypes).Name == "DataGridViewCheckBoxColumn")
{
CellCheckBox.Size = new Size(14, 14);
CellCheckBox.Checked = (bool)Cel.Value;
Bitmap bmp = new Bitmap((int)ColumnWidths, 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, tmpTop));
}
// For the ComboBox Column
else if (((Type) ColumnTypes).Name == "DataGridViewComboBoxColumn")
{
CellComboBox.Size = new Size((int)ColumnWidths, 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, tmpTop));
e.Graphics.DrawString(Cel.Value.ToString(), Cel.InheritedStyle.Font,
new SolidBrush(Cel.InheritedStyle.ForeColor),
new RectangleF((int)ColumnLefts + 1, tmpTop, (int)ColumnWidths
- 16, CellHeight), StrFormatComboBox);
}
// For the Image Column
else if (((Type) ColumnTypes).Name == "DataGridViewImageColumn")
{
Rectangle CelSize = new Rectangle((int)ColumnLefts,
tmpTop, (int)ColumnWidths, CellHeight);
Size ImgSize = ((Image)(Cel.FormattedValue)).Size;
e.Graphics.DrawImage((Image)Cel.FormattedValue,
new Rectangle((int)ColumnLefts + (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,
tmpTop, (int)ColumnWidths, 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);
}
}
}


nakon toga samo dodati kod za dugme kojim se vrši štampanje

private void btnstampanje_Click(object sender, EventArgs e)
{
PrintDGV.Print_DataGridView(naziv DataGridView-a);
}

I to bi bilo to...
 
Odgovor na temu

[es] :: .NET :: Stampanje DataGridView-a???

[ Pregleda: 3392 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.