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.
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.
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.
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.
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.
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.