Tekrar merhaba,

Bu seferki makalemiz yine FastReport.Net üzerine...

Bu makalede ise DataGridView üzerinde seçili satırların nasıl raporlanabileceğini incelemeye çalışacağız.

Aslında bu makale, temel olarak 'FastReport.Net Kullanımı - Visual Studio Integration' başlıklı yazıdan çok farklı değil. Aynı bilgileri, ancak farklı veritabanı ve nesne tiplerini kullanarak, başka bir işlem gerçekleştireceğiz.

Makalenin mevzuu olan kodlara geri dönelim.

Formumuzun görüntüsü şu şekilde olacak:

FastReportSample_001_Resim001.png

 

Forma ait kodlarımız da burada:


public partial class BookList : Form
{
   public BookList()
   {
      InitializeComponent();
      dgv.DataSource = GetList(); // Listeyi yüklüyoruz.
   }

   /// <summary>
   /// Sadece seçili satırları rapora yükler ve raporu gösterir.
   /// </summary>
   /// <param name="sender"></param>
   /// <param name="e"></param>
   private void ReportSelectedRows_Click(object sender, EventArgs e)
   {
      DataTable dt = GetFilledDataTableForReport(dgv);
      if (dt != null)
         CreateReport(dt);
   }

   /// <summary>
   /// Bütün satırları rapora yükler ve raporu gösterir.
   /// </summary>
   /// <param name="sender"></param>
   /// <param name="e"></param>
   private void ReportAllRows_Click(object sender, EventArgs e)
   {
      DataTable dt = GetFilledDataTableForReport(dgv, false);
      if (dt != null)
         CreateReport(dt);
   }

   /// <summary>
   /// Veritabanından kitap listesini çeker ve geriye döndürür.
   /// </summary>
   /// <returns></returns>
   List<BookInfoModel> GetList()
   {
      using (DBDataContext db = new DBDataContext())
      {
         return db.Books.OrderBy(x => x.Type.Name)
                        .ThenBy(x => x.Writer.Name)
                        .Select(x => new BookInfoModel()
                        {
                           Type = x.Type.Name,
                           Writer = x.Writer.Name,
                           Book = x.Name
                        })
                  .ToList();
      }
   }

   /// <summary>
   /// Rapor olarak sunulacak olan bilgileri DataTable'a yükler
   /// ve bu DataTable'ı geriye döndürür.
   /// </summary>
   /// <param name="dgv"></param>
   /// <param name="onlySelectedRows">Sadece seçili satırların
   /// yüklenip yüklenmeyeceğini belirler.</param>
   /// <returns></returns>
   DataTable GetFilledDataTableForReport(DataGridView dgv, bool onlySelectedRows = true)
   {
      // Sadece seçili satırlar talep edildiyse ve hiç satır seçilmemişse
      if (onlySelectedRows && dgv.SelectedRows.Count < 1)
      {
         MessageBox.Show("Seçili satır bulunamadığı için işlem iptal edildi.",
                         "Geçersiz İşlem", MessageBoxButtons.OK, MessageBoxIcon.Hand);
         return null;
      }

      DataTable dt = new DataTable();
      dt.Columns.AddRange(new DataColumn[] 
      { 
         new DataColumn("Book"),
         new DataColumn("Type"),
         new DataColumn("Writer") 
      });

      List<DataGridViewRow> rc;

      if (onlySelectedRows)
         rc = dgv.SelectedRows.Cast<DataGridViewRow>().ToList();
      else
         rc = dgv.Rows.Cast<DataGridViewRow>().ToList();

      for (int i = 0; i < rc.Count; i++)
      {
         dt.Rows.Add(
            rc[i].Cells[0].Value.ToString(),
            rc[i].Cells[1].Value.ToString(),
            rc[i].Cells[2].Value.ToString()
         );
      }

      return dt;
   }

   /// <summary>
   /// Raporu oluşturur.
   /// </summary>
   /// <param name="data">Rapora yüklenecek olan veri</param>
   private void CreateReport(DataTable data)
   {
      // Rapor dosyasını oluşturuyoruz.
      Report report = new Report();

      // Programla aynı dizinden şablon olarak kullandığımız raporu yüklüyoruz.
	  report.Load("Report_Sample.frx");

      // Gelen verileri şablon olarak oluşturduğumuz rapor içerisinde
      // ismi belirtilen tabloya register ediyoruz.
      report.RegisterData(data, "BooksWithTypes");

      // Raporu hazırlıyoruz.
      if (report.Prepare())
      {
         // Hazırlanmış olan raporun gösterilmesini sağlıyoruz.
         report.ShowPrepared();
      }
   }
}

Ve bu da modelleme gayesiyle oluşturduğumuz class:


public class BookInfoModel
{
   public string Book { get; set; }
   public string Type { get; set; }
   public string Writer { get; set; }
}

Kodları temel itibariyle bu mantık üzerinde (ya da  daha da geliştirerek) oluşturursanız; istediğiniz satırları rapor dosyasına göndererek, sadece onların raporlanmasını sağlayabilirsiniz.

Örnek kodları buradan indirebilirsiniz. Zip içindeki db.sql dosyası ile veritabanını oluşturduktan sonra app.config içindeki adres bilgisini kendi SQL sunucunuza ait bilgi ile değiştirerek doğrudan kodları çalıştırabilirsiniz.

 

Biraz kısa bir yazı oldu aslında ama zaten kodların aralarında yeterince açıklama mevcut.

Tekrar görüşünceye kadar hoşçakalın...

 

Yorumlar

Yorum Eklenmemiş...

Yorum Yaz

Adınız: *
E-Mail Adresiniz: *
Web Sitesi:
Yorum: *
Güvenlik Kodu: *
 
Tavsiye
Bağlantılar