C# Datagridview Verilerini Yazıcıdan Çıktı Alma
-
Merhaba mübarekler,
Şimdi benim formumda bir datagridview, bir yazdır butonu (btn_Yazdir), bir baskı önizleme butonu(btn_BaskiOnizleme), bir de sayfa yapısı butonu (btn_SayfaYapisi) var. Ben datagridviewdeki verileri yazdırmak istiyorum. Tabi ondan once de baskı onizleme butonuna tıklandığında önizleme göstermek istiyorum. Kodlama şu şekilde;
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Font baslik = new System.Drawing.Font("Arial",13,FontStyle.Bold);
Font altbaslik= new System.Drawing.Font("Arial",12,FontStyle.Regular);
System.Drawing.Printing.PageSettings p= printDocument1.DefaultPageSettings;
int x=135,y=135,say=datagridview1.Rows.Count;
e.Graphics.DrawLine(new Pen(Color.Black,2),p.Margins.Left,125,p.PaperSize.Width-p.Margins.Right,125);
e.Graphics.DrawString("Ad",baslik,Brushes.Black,130,130);
e.Graphics.DrawString("Soyad",baslik,Brushes.Black,300,130);
e.Graphics.DrawString("Telefon",baslik,Brushes.Black,460,130);
e.Graphics.DrawLine(new Pen(Color.Black,2),p.Margins.Left,153,p.PaperSize.Width-p.Margins.Right,153);
int i = 0;
if (i < say)
{
x += 25;
string ad = datagridview1.Rows[i].Cells[1].Value.ToString();
string soyad = datagridview1.Rows[i].Cells[2].Value.ToString();
string telefon = datagridview1.Rows[i].Cells[9].Value.ToString();
e.Graphics.DrawString(ad, altbaslik, Brushes.Black, 130, x);
e.Graphics.DrawString(soyad, altbaslik, Brushes.Black, 300, x);
e.Graphics.DrawString(telefon, altbaslik, Brushes.Black, 460, x);
e.Graphics.DrawLine(new Pen(Color.Black, 2), p.Margins.Left, 153, p.PaperSize.Width - p.Margins.Right, 153);
i++;
}
}private void btn_Yazdir_Click(object sender, EventArgs e)
{
PrintDialog yazdir = new PrintDialog();
yazdir.Document = printDocument1;
yazdir.UseEXDialog = true;
if (yazdir.ShowDialog() == DialogResult.OK)
{
printDocument1.Print();
}
}private void btn_SayfaYapisi_Click(object sender, EventArgs e)
{
pageSetupDialog1.PageSettings = printDocument1.DefaultPageSettings;
if (pageSetupDialog1.ShowDialog() == DialogResult.OK)
printDocument1.DefaultPageSettings = pageSetupDialog1.PageSettings;
}
Şimdi ben bu kodu çalıştırdığımda hata vermiyor. Ancak datagridview den yalnızca bir satır çekiyor. printDocument1_PrintPage' in içerisindeki if döngüsünü while ile denediğimde ise string ad = datagridview1.Rows[i].Cells[1].Value.ToString(); satırında "Nesne başvurusu bir nesnenin örneğine ayarlanmadı." şeklinde hata alıyorum.
while döngüsü ile şu şekilde yapıyorum;while(i<say)
{
x += 25;
string ad = datagridview1.Rows[i].Cells[1].Value.ToString();
string soyad = datagridview1.Rows[i].Cells[2].Value.ToString();
string telefon = datagridview1.Rows[i].Cells[9].Value.ToString();
e.Graphics.DrawString(ad, altbaslik, Brushes.Black, 130, x);
e.Graphics.DrawString(soyad, altbaslik, Brushes.Black, 300, x);
e.Graphics.DrawString(telefon, altbaslik, Brushes.Black, 460, x);
e.Graphics.DrawLine(new Pen(Color.Black, 2), p.Margins.Left, 153, p.PaperSize.Width - p.Margins.Right, 153);
i++;
}
Neden while döngüsü ile bu hatayı alıyorum çözemedim. Yardımcı olabilecek müridleri bekliyorum. Teşekkürler, iyi günler. -
hocam code formatting denilen bir olay var, lutfen anlasilir olmasi icin bunu kullanin, karman corman halde, okunabilirligi yok bir de bir suru kod..
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { Font baslik = new System.Drawing.Font("Arial",13,FontStyle.Bold); Font altbaslik= new System.Drawing.Font("Arial",12,FontStyle.Regular); System.Drawing.Printing.PageSettings p= printDocument1.DefaultPageSettings; int x=135,y=135,say=datagridview1.Rows.Count; e.Graphics.DrawLine(new Pen(Color.Black,2),p.Margins.Left,125,p.PaperSize.Width-p.Margins.Right,125); e.Graphics.DrawString("Ad",baslik,Brushes.Black,130,130); e.Graphics.DrawString("Soyad",baslik,Brushes.Black,300,130); e.Graphics.DrawString("Telefon",baslik,Brushes.Black,460,130); e.Graphics.DrawLine(new Pen(Color.Black,2),p.Margins.Left,153,p.PaperSize.Width-p.Margins.Right,153); int i = 0; if (i < say) { x += 25; string ad = datagridview1.Rows[i].Cells[1].Value.ToString(); string soyad = datagridview1.Rows[i].Cells[2].Value.ToString(); string telefon = datagridview1.Rows[i].Cells[9].Value.ToString(); e.Graphics.DrawString(ad, altbaslik, Brushes.Black, 130, x); e.Graphics.DrawString(soyad, altbaslik, Brushes.Black, 300, x); e.Graphics.DrawString(telefon, altbaslik, Brushes.Black, 460, x); e.Graphics.DrawLine(new Pen(Color.Black, 2), p.Margins.Left, 153, p.PaperSize.Width - p.Margins.Right, 153); i++; } } private void btn_Yazdir_Click(object sender, EventArgs e) { PrintDialog yazdir = new PrintDialog(); yazdir.Document = printDocument1; yazdir.UseEXDialog = true; if (yazdir.ShowDialog() == DialogResult.OK) { printDocument1.Print(); } } private void btn_SayfaYapisi_Click(object sender, EventArgs e) { pageSetupDialog1.PageSettings = printDocument1.DefaultPageSettings; if (pageSetupDialog1.ShowDialog() == DialogResult.OK) printDocument1.DefaultPageSettings = pageSetupDialog1.PageSettings; }
while(i<say) { x += 25; string ad = datagridview1.Rows[i].Cells[1].Value.ToString(); string soyad = datagridview1.Rows[i].Cells[2].Value.ToString(); string telefon = datagridview1.Rows[i].Cells[9].Value.ToString(); e.Graphics.DrawString(ad, altbaslik, Brushes.Black, 130, x); e.Graphics.DrawString(soyad, altbaslik, Brushes.Black, 300, x); e.Graphics.DrawString(telefon, altbaslik, Brushes.Black, 460, x); e.Graphics.DrawLine(new Pen(Color.Black, 2), p.Margins.Left, 153, p.PaperSize.Width - p.Margins.Right, 153); i++; }
duzelmiyor kodun, ben kod olsam ben de calismazdim :)
kimse yardimci olmazsa aksam bakarim, suan isteyim
-
anladigim kadariyla hatan su, null olan bir degeri almaya calisiyorsun
datagridview1.Rows[i].Cells[9].Value bunun sonucu null ise .ToString() yaparsan null exception firlatir. soyle yap while in icindekileri
string ad = ""; if(datagridview1.Rows[i].Cells[1].Value != null) ad = datagridview1.Rows[i].Cells[1].Value.ToString();
digerleri icin de bu sekilde yap
-
Ben bunu kullanmistim iyiydi.
http://www.codeproject.com/Articles/28046/Printing-of-DataGridView
-
Hocam
Hata aldiginda .Value yazan kismin uzerine mouse ile git ve bak bakalim value = null degerinde mi ?
Veritabanindan verileri cekerken null ise null degeri aliyor fakat bos gibi gorunuyor. Ayni zamanda eger datagridview'i kendin olusturuyorsan bos biraktigin Cell lerin Value'si null degerini alir.
Ayrica su sekilde yapabilirsin o satiri
Bunun yerine
datagridview1.Rows[i].Cells[1].Value.ToString();
Su sekilde yap
string value = datagridview1.Rows[i].Cells[1].Value == null ? "" : datagridview1.Rows[i].Cells[1].Value.ToString() ;
Boylece null oldugu zaman bos string degeri alir ve sikinti olmaz. Ondan sonra value degiskenini kullan.
-
@unbalanced,@dhmm ikiside işe yarıyor. Çok teşekkür ederim. Boş değerleri hesaba katmamıştım. Şu an baskı önizleme ve yazdır işlemini yapabiliyorum. Tekrar teşekkür ederim,vakit ayırdığınız için sağolun.
@unbalanced hoca kusura bakma kodlar öyle dağınık halde değildi aslında. Alel acele konu açtım.