[MAKALE] - DataGridView' da Bulunan Satırları Yazdırmak

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
Merhaba Arkadaşlar,

Datagridview üzerinde bulunan satırların önizleme ve yazıcı çıktısı olarak nasıl alınabileceği ile ilgili bir işlemi aşağıdaki satırları takip ederek yapabilirsiniz.

-------

1. İşlemimiz grid' in dolmasından sonra oluşacağı için kullanılan database türünün bir önemi bulunmamaktadır. Biz sql olarak devam edelim. Sql' den verilerilerimizi çektik ve datagridview' ın içerisine doldurduk.

2. Global olarak aşağıda bulunan değişkenleri tanımlamamız gerekmektedir.

Kod:
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;

3. Formumuza bir tane printDocument nesnesi ekliyoruz. Öncelikle printDocument1_PrintPage eventına aşağıda bulunan kodu yazıyoruz.


Kod:
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("Çıktı Başlığı", new Font(dataGridView1.Font, FontStyle.Bold),
                                    Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top -
                                    e.Graphics.MeasureString("Çıktı Başlığı", 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("Çıktı Başlığı", 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);
            }

4. Aynı şekilde printDocument1_BeginPrint eventına aşağıda bulunan kodu yazıyoruz.

Kod:
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);
            }

5. Gelelim önizleme ile datagridview üzerinde bulunan satırların görüntülenmesine. Formumuza bir button ekliyoruz ve Click eventına aşağıda bulunan kodu ekliyoruz.

Kod:
PrintPreviewDialog onizleme = new PrintPreviewDialog();
            onizleme.Document = printDocument1;
            onizleme.ShowDialog();

6. Önizleme görüntüsünü bu şekilde elde etmiş olduk. Artık önizlemenin üzerinde bulunan menüden yazdır işlemini yapabilirsiniz. Fakat sizler direk yazıcıya çıktı göndermek isterseniz aşağıdaki kod ile bunu yapabilirsiniz.

Kod:
 PrintDialog yazdir = new PrintDialog();
            yazdir.Document = printDocument1;
            yazdir.UseEXDialog = true;
            if (yazdir.ShowDialog() == DialogResult.OK)
            {
                printDocument1.Print();
            }


Bu işlemler sonucunda datagridview üzerinde bulunan kayıtların çıktısını alabilirsiniz.
Dilerim faydalı bir anlatım olmuştur.

Başarılar dilerim.
 

Samet.Sayman

Öğrenci
Katılım
25 Haziran 2012
Mesajlar
19
Reaksiyon puanı
0
Puanları
0
Kardeşim Çok TEŞEKKÜR ediyorum çok saol. Çok işime yaradı bu kodlar. :)
 

eSa

Dekan
Katılım
5 Kasım 2011
Mesajlar
9,781
Reaksiyon puanı
352
Puanları
263
Eline sağlık güzel bir anlatım olmuş.
 
K

Kayıtsız Üye

SDN Okuru
kodlar için teşşekürler arraylist tanımlama kısmında hata veriyor neden olabilir
 
S

SDN Okuru

SDN Okuru
Merhaba arraylist hatasını nasıl çözebiliriz?
Lütfen yardım edermisinz?
 

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
Yukarıdaki kodu aynı şekilde uyguladığın zaman ArrayList' te herhangi bir hata bulunmamakta.
Aldığın hatayı daha açıklayıcı cümlelerle anlatırmısın.
 

Ogün ÇİMEN

Öğrenci
Katılım
4 Temmuz 2016
Mesajlar
1
Reaksiyon puanı
0
Puanları
1
Konum
Ankara
ArrayList Hatası alanlar için çözüm
Yukarıdaki kütüphane tanımlamalarına şu kodu yazıyoruz = using System.Collections;

Bunu yazdıktan sonra hata almayacaksınız. Hadi Kolay gelsin :) ;)

 
Üst