C# Listview Çıktı Alma Sayfalama Problemi
-
merhaba arkadaşlar c# hazırladığım bir uygulamada listview deki listeyi çıktı almam gerekiyor düzenlemiş olduğum kod sorunsuz olarak çıktı veriyor fakat satır sayısı 1. sayfayı aştığında işler karışıyor alttaki kodlarda ne gibi bir düzenleme yaparsam bu sorunu çözebilirim.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364private
void
printDocument1_PrintPage(
object
sender, PrintPageEventArgs e)
{
//Yazı fontumu ve çizgi çizmek için fırçamı ve kalem nesnemi oluşturdum
Font myFont =
new
Font(
"Calibri"
, 28);
SolidBrush sbrush =
new
SolidBrush(Color.Black);
Pen myPen =
new
Pen(Color.Black);
//Bu kısımda ürün listesi yazısını ve çizgileri yazdırıyorum
e.Graphics.DrawLine(myPen, 120, 120, 750, 120);
e.Graphics.DrawString(
"ÜRÜN LİSTESİ"
, myFont, sbrush, 320, 125);
e.Graphics.DrawLine(myPen, 120, 180, 750, 180);
//Bu kısımda üst bilgileri yazdırıyorum
e.Graphics.DrawLine(myPen, 120, 200, 750, 200);
myFont =
new
Font(
"Calibri"
, 12);
e.Graphics.DrawString(
"Tarih"
, myFont, sbrush, 140, 205);
e.Graphics.DrawString(
"Bayi/Firma"
, myFont, sbrush, 220, 205);
e.Graphics.DrawString(
"Ürün"
, myFont, sbrush, 400, 205);
e.Graphics.DrawString(
"Adet"
, myFont, sbrush, 520, 205);
e.Graphics.DrawString(
"Takas"
, myFont, sbrush, 595, 205);
e.Graphics.DrawString(
"Patlak"
, myFont, sbrush, 670, 205);
e.Graphics.DrawLine(myPen, 120, 228, 750, 228);
int
y = 240;
//Yazıyı Sola Daya
StringFormat SolFormat =
new
StringFormat();
SolFormat.Alignment = StringAlignment.Near;
//Yazıyı Ortaya
StringFormat OrtaFormat =
new
StringFormat();
OrtaFormat.Alignment = StringAlignment.Center;
//listview verilerini oku
foreach
(ListViewItem lvi
in
lstArama.Items)
{
string
cpatlak = lvi.SubItems[6].Text;
string
ctakas = lvi.SubItems[5].Text;
string
cadet = lvi.SubItems[4].Text;
string
curun = lvi.SubItems[3].Text;
string
cbayi = lvi.SubItems[2].Text;
string
ctarih = lvi.SubItems[1].Text;
e.Graphics.DrawString(cpatlak, myFont, sbrush, 700, y, OrtaFormat);
e.Graphics.DrawString(ctakas, myFont, sbrush, 615, y, OrtaFormat);
e.Graphics.DrawString(cadet, myFont, sbrush, 535, y, OrtaFormat);
e.Graphics.DrawString(curun, myFont, sbrush, 370, y, SolFormat);
e.Graphics.DrawString(cbayi, myFont, sbrush, 220, y, SolFormat);
e.Graphics.DrawString(ctarih, myFont, sbrush, 160, y, OrtaFormat);
y += 20;
}
//En alt toplam miktarları yaz
e.Graphics.DrawLine(myPen, 120, y, 750, y);
e.Graphics.DrawString(lbltAdet.Text, myFont, sbrush, 535, y + 10, OrtaFormat);
e.Graphics.DrawString(lbltTakas.Text, myFont, sbrush, 615, y + 10, OrtaFormat);
e.Graphics.DrawString(lbltPatlak.Text, myFont, sbrush, 700, y + 10, OrtaFormat);
}
1 -
up
-
Graphicsle olacak ise benzemiyor bi report componenti kullansana
-
arkadaşlar yardımlarınız için teşekkürler problemimi bi şekilde çözdüm başkalarınada yardımı olur diye eklemek istedim.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364int
i = 0;
private
void
printDocument1_PrintPage(
object
sender, PrintPageEventArgs e)
{
//Yazı fontumu ve çizgi çizmek için fırçamı ve kalem nesnemi oluşturdum
Font Baslik =
new
Font(
"Arial"
, 12,FontStyle.Bold);
Font AltBaslik =
new
Font(
"Arial"
, 12, FontStyle.Regular);
SolidBrush sbrush =
new
SolidBrush(Color.Black);
Pen myPen =
new
Pen(Color.Black);
System.Drawing.Printing.PageSettings p = printDocument1.DefaultPageSettings;
int
x = 135, y = 135, say = lstArama.Items.Count;
//Yazıyı Sola Daya
StringFormat SolFormat =
new
StringFormat();
SolFormat.Alignment = StringAlignment.Near;
//Yazıyı Ortaya
StringFormat OrtaFormat =
new
StringFormat();
OrtaFormat.Alignment = StringAlignment.Center;
//Bu kısımda üst bilgileri yazdırıyorum
e.Graphics.DrawLine(myPen, p.Margins.Left, 120, p.PaperSize.Width - p.Margins.Right, 120);
e.Graphics.DrawString(
"Tarih"
, Baslik, sbrush, 120, 125);
e.Graphics.DrawString(
"Bayi/Firma"
, Baslik, sbrush, 205, 125);
e.Graphics.DrawString(
"Ürün"
, Baslik, sbrush, 400, 125);
e.Graphics.DrawString(
"Adet"
, Baslik, sbrush, 530, 125);
e.Graphics.DrawString(
"Takas"
, Baslik, sbrush, 595, 125);
e.Graphics.DrawString(
"Patlak"
, Baslik, sbrush, 670, 125);
e.Graphics.DrawLine(myPen, p.Margins.Left, 148, p.PaperSize.Width - p.Margins.Right, 148);
while
(i < say)
{
x += 25;
//listview deki kayıtları aldk yazdık her seferinde y koordinatını arttırdık
e.Graphics.DrawString(lstArama.Items[i].SubItems[1].Text, AltBaslik, sbrush, 100, x);
e.Graphics.DrawString(lstArama.Items[i].SubItems[2].Text, AltBaslik, sbrush, 205, x);
e.Graphics.DrawString(lstArama.Items[i].SubItems[3].Text, AltBaslik, sbrush, 370, x);
e.Graphics.DrawString(lstArama.Items[i].SubItems[4].Text, AltBaslik, sbrush, 540, x);
e.Graphics.DrawString(lstArama.Items[i].SubItems[5].Text, AltBaslik, sbrush, 615, x);
e.Graphics.DrawString(lstArama.Items[i].SubItems[6].Text, AltBaslik, sbrush, 690, x);
i++;
//1 sayfayı geçiyorsa burası çalışacak
if
((x + y + 20) > (p.PaperSize.Height + 60 - p.Margins.Bottom + 60))
{
e.HasMorePages =
true
;
break
;
}
}
//liste tamamlanmışsa
if
(i >= say)
{
e.HasMorePages =
false
;
i = 0;
//En alt toplam miktarları yaz
e.Graphics.DrawLine(myPen, p.Margins.Left, x + 25, p.PaperSize.Width - p.Margins.Right, x + 25);
e.Graphics.DrawString(lbltAdet.Text, AltBaslik, sbrush, 535, x + 25);
e.Graphics.DrawString(lbltTakas.Text, AltBaslik, sbrush, 615, x + 25);
e.Graphics.DrawString(lbltPatlak.Text, AltBaslik, sbrush, 690, x + 25);
}
}
Toplam Hit: 2411 Toplam Mesaj: 5