Form üzerindeki datagridview nesnenizde o an ne görünüyorsa aynen o şekilde yazıcıdan çıktı alabilirsiniz.Yapmanız gerekenler
- Öncelikle using System.Collections; kütüphanesini tanımlayın
- Daha sonra formunuzun herhangi bir yerinde global olarak şu değişkenleri tanımlayın
StringFormat strFormat;
ArrayList arrColumnLefts = new ArrayList();
ArrayList arrColumnWidths = new ArrayList();
int iCellHeight = 0;
int iTotalWidth = 0;
int iRow = 0;
bool bFirstPage = false;
bool bNewPage = false;
int iHeaderHeight = 0;
- Formunuza bir adet printDocument nesnesini ekleyin
- PrintDocument nesnesinin Printpage olayına şunları yazın
try
{
int iLeftMargin = e.MarginBounds.Left;
int iTopMargin = e.MarginBounds.Top;
bool bMorePagesToPrint = false;
int iTmpWidth = 0;
bFirstPage = true;if (bFirstPage)
{
foreach (DataGridViewColumn GridCol in dataGridView1.Columns)
{
iTmpWidth = (int)(Math.Floor((double)((double)GridCol.Width /
(double)iTotalWidth * (double)iTotalWidth *
((double)e.MarginBounds.Width / (double)iTotalWidth))));iHeaderHeight = (int)(e.Graphics.MeasureString(GridCol.HeaderText,
GridCol.InheritedStyle.Font, iTmpWidth).Height) + 11;arrColumnLefts.Add(iLeftMargin);
arrColumnWidths.Add(iTmpWidth);
iLeftMargin += iTmpWidth;
}
}while (iRow <= dataGridView1.Rows.Count – 1)
{
DataGridViewRow GridRow = dataGridView1.Rows[iRow];iCellHeight = GridRow.Height + 5;
int iCount = 0;if (iTopMargin + iCellHeight >= e.MarginBounds.Height + e.MarginBounds.Top)
{
bNewPage = true;
bFirstPage = false;
bMorePagesToPrint = true;
break;
}
else
{
if (bNewPage)
{e.Graphics.DrawString(“Muhammed Koyuncu Datagird Raporu”, new Font(dataGridView1.Font, FontStyle.Bold),
Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top –
e.Graphics.MeasureString(“Muhammed Koyuncu Datagird Raporu”, new Font(dataGridView1.Font,
FontStyle.Bold), e.MarginBounds.Width).Height – 13);String strDate = DateTime.Now.ToLongDateString() + ” ” + DateTime.Now.ToShortTimeString();
e.Graphics.DrawString(strDate, new Font(dataGridView1.Font, FontStyle.Bold),
Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width –
e.Graphics.MeasureString(strDate, new Font(dataGridView1.Font,
FontStyle.Bold), e.MarginBounds.Width).Width), e.MarginBounds.Top –
e.Graphics.MeasureString(“Muhammed Koyuncu Datagird Raporu”, new Font(new Font(dataGridView1.Font,
FontStyle.Bold), FontStyle.Bold), e.MarginBounds.Width).Height – 13);iTopMargin = e.MarginBounds.Top;
foreach (DataGridViewColumn GridCol in dataGridView1.Columns)
{
e.Graphics.FillRectangle(new SolidBrush(Color.LightGray),
new Rectangle((int)arrColumnLefts[iCount], iTopMargin,
(int)arrColumnWidths[iCount], iHeaderHeight));e.Graphics.DrawRectangle(Pens.Black,
new Rectangle((int)arrColumnLefts[iCount], iTopMargin,
(int)arrColumnWidths[iCount], iHeaderHeight));e.Graphics.DrawString(GridCol.HeaderText, GridCol.InheritedStyle.Font,
new SolidBrush(GridCol.InheritedStyle.ForeColor),
new RectangleF((int)arrColumnLefts[iCount], iTopMargin,
(int)arrColumnWidths[iCount], iHeaderHeight), strFormat);
iCount++;
}
bNewPage = false;
iTopMargin += iHeaderHeight;
}
iCount = 0;foreach (DataGridViewCell Cel in GridRow.Cells)
{
if (Cel.Value != null)
{
e.Graphics.DrawString(Cel.Value.ToString(), Cel.InheritedStyle.Font,
new SolidBrush(Cel.InheritedStyle.ForeColor),
new RectangleF((int)arrColumnLefts[iCount], (float)iTopMargin,
(int)arrColumnWidths[iCount], (float)iCellHeight), strFormat);
}e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)arrColumnLefts[iCount],
iTopMargin, (int)arrColumnWidths[iCount], iCellHeight));iCount++;
}
}
iRow++;
iTopMargin += iCellHeight;
}if (bMorePagesToPrint)
e.HasMorePages = true;
else
e.HasMorePages = false;
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, “Error”, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
- PrintDocument nesnesinin BeginPrint olayına şunları yazın
try
{
strFormat = new StringFormat();
strFormat.Alignment = StringAlignment.Near;
strFormat.LineAlignment = StringAlignment.Center;
strFormat.Trimming = StringTrimming.EllipsisCharacter;arrColumnLefts.Clear();
arrColumnWidths.Clear();
iCellHeight = 0;
iRow = 0;
bFirstPage = true;
bNewPage = true;iTotalWidth = 0;
foreach (DataGridViewColumn dgvGridCol in dataGridView1.Columns)
{
iTotalWidth += dgvGridCol.Width;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, “Error”, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
- Yazdır butonu ekleyın ve bu butonun tıklanma olayına şunları girin
PrintPreviewDialog onizleme = new PrintPreviewDialog();
onizleme.Document = printDocument1;
onizleme.ShowDialog();
İşlem tamamdır.Datagiridview üzerinde o an hangi kayıtlar yer alıyorsa bu kayıtları önizlemesi alınır ve önizleme ekranında yazdıra basılır.
Eğer direk yazdırmak istiyorsanız yani önizleme almadan
Yazdır butonunun tıklama olayına şunları yazın
PrintDialog yazdir = new PrintDialog();
yazdir.Document = printDocument1;
yazdir.UseEXDialog = true;
if (yazdir.ShowDialog() == DialogResult.OK)
{
printDocument1.Print();
}
Yaaa arkadaş emek vermişsin allah razı olsun eyvallah ama..bu ne boyle agaa yaa..altı üstü bir grid icindeki veriyi sayfada gosterecez..sen tarih yazmisin resmen
aynen haklı adam daha kısa yolu yok mu?
Ellerine sağlık. üstat. sadece öğrenmek istediğim minik bir sorum vardı. sayfayı yazdırdığımız da dikey işliyor. bunu yatay olarak nasıl bastırabiliriz? malumunuz ayar sayfası yok.
Yazdır butonunun click olayına sadece bu kodları yazmanız yeterli olacaktır.
PrintPreviewDialog onizleme = new PrintPreviewDialog();
onizleme.Document = printDocument1;
onizleme.ShowDialog();
PrintDialog yazdir = new PrintDialog();
yazdir.Document = printDocument1;
yazdir.UseEXDialog = true;
if (yazdir.ShowDialog() == DialogResult.OK)
{
printDocument1.Print();
}