Merhabalar,
 
Bu yazımda FastReport.Net raporlama aracının Visual Studio IDE ile hazırlanan C# ve VB.NET projeleri içerisinde kullanımından bahsetmeye çalışacağım. Ancak bu yazı daha önceki FastReport .NET kullanımı hakkındaki yazılarla bağlantılı olduğu için öncelikle onları incelemeniz konuyu kavramanız açısından daha faydalı olacaktır.
 
Şimdi ilk olarak oluşturacağınız rapor dosyalarını görüntüleyebilmek için PreviewControl componentini form üzerinde istediğiniz biçimde yerleştirin ve kod sayfasının tepesine C#.NET için using FastReport;  VB.NET için Imports FastReport satırlarını ekleyin.
 
Benim yaptığım örnekteki görüntü şu şekildeydi.
 
 
Raporlama Arayüzü
 
Şimdi de gerekli kodları yazalım ama öncesinde şunu belirtmeliyim. Kullandığım sistem 64 Bit olduğu için Access DB konusunda problem yaşadım. Bu yüzden kodlar içerisinde ODBC bağlantısını kullandım. Siz bu bağlantıyı istediğiniz gibi değiştirerek kendinize göre uyarlayabilirsiniz. Ancak kullanacağınız bağlantıya ait namespace'i eklemeyi unutmayın.
 
C#.NET

public partial class ReportPage : Form
{
   Report report;

   private void ReportPage_Load(object sender, EventArgs e)
   {
      CreateReport();
   }
   
   /// <summary>
   /// Rapor içeriğini hazırlar.
   /// </summary>
   private void CreateReport()
   {
      // Yeni bir rapor dosyası oluşturuyoruz.
      report = new Report(); 

      // Resources içerisindeki string biçimindeki raporu
      // yeni oluşturduğumuz rapor içerisine yüklüyoruz.
      report.LoadFromString(Properties.Resources.ReportString);

      // Veritabanına gerekli sorguyu gönderip verileri çekiyoruz.
      DataTable dt = SQLProcesses.GetDataTable("SELECT T.Type, W.WriterName, B.BookName "
                                             + "FROM tblBooks B, tblBookTypes T, tblWriters W "
                                             + "WHERE B.BookTypeID = T.ID AND W.ID = B.BookWriterID "
                                             + "ORDER BY T.Type ASC, W.WriterName ASC");

      // Çektiğimiz verileri daha önceden şablon olarak oluşturduğumuz
      // rapor içerisinde ismi belirtilen tabloya register ediyoruz.
      report.RegisterData(dt, "tblBooksWithTypes");

      /* Rapor gösterilemezse olacakları burada belirliyoruz.
       * Ancak bu kullanımın mecburi olmadığını yalnızca birden fazla rapor oluştururken
       * kullanımı kolaylaştırmak gayesiyle böyle tasarlandığına dikkat edelim. */
      if (!ShowReport(report))
      {
         Application.Exit();
      }
   }

   /// <summary>
   /// Gönderilen raporun görüntülenmesini sağlar ve işlemin başarı durumunu geriye döndürür.
   /// </summary>
   /// <param name="report"></param>
   /// <returns></returns>
   private bool ShowReport(Report report)
   {
      bool rV = false;
      try
      {
         // Gönderilen rapor dosyasının form üzerindeki
         // PreviewControl de gösterileceğini belirtiyoruz.
         report.Preview = pCReports; 

         // Eğer rapor arkapkanda hazırlanmışsa sonraki adıma geçiyoruz. 
         if (report.Prepare()) 
         {
            // Hazırlanmış olan raporun gösterilmesini sağlıyoruz.
            report.ShowPrepared();
            
            // Rapor üzerinde scroll işlemlerini doğrudan gerçekleştirebilmek için
            // PreviewControl üzerine odaklanıyoruz.
            pCReports.Focus(); 

            rV = true;
         }
      }
      catch
      {
         rV = false;
      }
     
      // Eğer rapor başarılı bir şekilde oluşturulduysa geriye true değeri döndürüyoruz.
      return rV; 
   }
}

public class SQLProcesses
{
   /// <summary>
   /// Rapor içeriğini veritabanından çekerek DataTable içerisinde geri döndürür.
   /// </summary>
   /// <param name="cmd">Veritabanına gönderilecek olan sorgu</param>
   /// <returns></returns>
   public static DataTable GetDataTable(string cmd)
   {
      DataTable returnTable = new DataTable();
      try
      {
         OdbcConnection ODBCConn = new OdbcConnection (@"Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
                                                      + "dbq=C:\FASTREPORT .NET SAMPLE\data.mdb;defaultdir=C:\FASTREPORT .NET SAMPLE;"
                                                      + "driverid=25;fil=MS Access;filedsn=C:\FastReport .NET Sample\FR.NETConn.dsn;"
                                                      + "maxbuffersize=2048;maxscanrows=8;pagetimeout=5;safetransactions=0;threads=3;"
                                                      + "usercommitsync=Yes;uid=admin");
         
         OdbcDataAdapter oda = new OdbcDataAdapter(cmd, ODBCConn);
         oda.Fill(returnTable);
      }
      catch(Exception ex)
      {
         MessageBox.Show(string.Format("Hata Oluştu. Hata İçeriğini Aşağıda Görebilirsiniz.\n\n{0}", ex.Message));
      }

      return returnTable;
   }
}

VB.NET

Imports FastReport
Imports System.Data.Odbc

Partial Public Class ReportPage

    Inherits Form

    Private report As Report

    Private Sub ReportPage_Load_1(ByVal sender As System.Object,
                                  ByVal e As System.EventArgs)
    Handles MyBase.Load
        CreateReport()
    End Sub

    ''' <summary>
    ''' Rapor içeriğini hazırlar.
    ''' </summary>
    Private Sub CreateReport()

        ' Yeni bir rapor dosyası oluşturuyoruz.
        report = New Report()

        ' Resources içerisindeki string biçimindeki raporu
        ' yeni oluşturduğumuz rapor içerisine yüklüyoruz.
        report.LoadFromString(My.Resources.MyResources.ReportString)

        ' Veritabanına gerekli sorguyu gönderip verileri çekiyoruz.
        Dim dt As DataTable = SQLProcesses.GetDataTable("SELECT T.Type, W.WriterName, B.BookName "
                                                      & "FROM tblBooks B, tblBookTypes T, tblWriters W "
                                                      & "WHERE B.BookTypeID = T.ID AND W.ID = B.BookWriterID "
                                                      & "ORDER BY T.Type ASC, W.WriterName ASC")

        ' Çektiğimiz verileri daha önceden şablon olarak oluşturduğumuz
        ' rapor içerisinde ismi belirtilen tabloya register ediyoruz.
        report.RegisterData(dt, "tblBooksWithTypes")

        ' Rapor gösterilemezse olacakları burada belirliyoruz.
        ' Ancak bu kullanımın zorunlu olmadığını yalnızca birden fazla rapor oluştururken
        ' kullanımı kolaylaştırmak amacıyla böyle tasarlandığına dikkat edelim.
        If Not ShowReport(report) Then
            Application.[Exit]()
        End If
    End Sub

    ''' <summary>
    ''' Gönderilen raporun görüntülenmesini sağlar ve işlemin başarı durumunu geriye döndürür.
    ''' </summary>
    ''' <param name="report"></param>
    ''' <returns></returns>
    Private Function ShowReport(ByVal report As Report) As Boolean
        Dim rV As Boolean = False
        Try

            ' Gönderilen rapor dosyasının form üzerindeki
            ' PreviewControl de gösterileceğini belirtiyoruz.
            report.Preview = pCReports

            ' Eğer rapor arkapkanda hazırlanmışsa sonraki adıma geçiyoruz.
            If report.Prepare() Then

                ' Hazırlanmış olan raporun gösterilmesini sağlıyoruz.
                report.ShowPrepared()

                ' Rapor üzerinde scroll işlemlerini doğrudan gerçekleştirebilmek için
                ' PreviewControl üzerine odaklanıyoruz.
                pCReports.Focus()

                rV = True
            End If
        Catch
            rV = False
        End Try

        ' Eğer rapor başarılı bir şekilde oluşturulduysa geriye true değeri döndürüyoruz.
        Return rV

    End Function

End Class

Public Class SQLProcesses
    ''' <summary>
    ''' Rapor içeriğini veritabanından çekerek DataTable içerisinde geri döndürür.
    ''' </summary>
    ''' <param name="cmd">Veritabanına gönderilecek olan sorgu</param>
    ''' <returns></returns>
    Public Shared Function GetDataTable(ByVal cmd As String) As DataTable
        Dim ReturnTable As New DataTable()
        Try
            Dim ODBCConn As New OdbcConnection("Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
                                             & "dbq=C:\FASTREPORT .NET SAMPLE\data.mdb;"
                                             & "defaultdir=C:\FASTREPORT .NET SAMPLE;driverid=25;"
                                             & "fil=MS Access;filedsn=C:\FastReport .NET Sample\FR.NETConn.dsn;"
                                             & "maxbuffersize=2048;maxscanrows=8;pagetimeout=5;safetransactions=0;"
                                             & "threads=3;usercommitsync=Yes;uid=admin")

            Dim oda As New OdbcDataAdapter(cmd, ODBCConn)
            oda.Fill(ReturnTable)
        Catch ex As Exception
            MessageBox.Show(String.Format("Hata Oluştu. Hata İçeriğini Aşağıda Görebilirsiniz."
                                          & vbLf & vbLf & "{0}", ex.Message))
        End Try

        Return ReturnTable
    End Function
End Class

Yapmamız gereken işlemler bu kadar. Bunların yanısıra farklı kodlarla doğrudan VS IDE içerisinde rapor içeriği oluşturulabiliyor olmasına rağmen buradaki gibi şablon oluşturup içerisindeki tablolara verileri yüklemek daha kolay ve kullanışlı olduğu için diğer kodlara girmiyorum.
 
Ayrıca şunu da belirtmeliyim. FastReport.Net Designer üzerinde oluşturup kaydettiğiniz dosyalar metin tabanlı dosyalardır. Basit düzeyde herhangi bir metin editörü (notepad, emeditor, notepad++, vs.) ile açıp içerisindeki metni alıp resources içerisinde depolayabilirsiniz. Bizim burada yaptığımız da buydu zaten.
 

Yaptığımız örnekle ilgili örnek kodları buradan indirebilirsiniz Örnek kodlar hem C# .NET hem de VB .NET üzerinde oluşturulmuştur.


Not1Örnek kodun doğru bir şekilde çalışması için zip dosyasının içeriğini C:\ adresine çıkartın.

Not2: Kullandığım FastReport.Net sürümü 1.2.47, Visual Studio sürümü 2008'dir.

Not3: VB.NET kodları http://www.developerfusion.com/tools/convert/csharp-to-vb/ üzerinden otomatik olarak oluşturulmuştur ancak sonrasında gerekli düzeltmeler yapılmış ve çalıştığı test edilmiştir.

Not4: Kod içerisinde kullandığım veritabanı bağlantısı ODBC üzerinden gerçekleştiği için resources içerisine gömdüğüm string de Report_Sample[ODBCConn].frx isimli dosyaya ait. Bu yüzden kodları doğrudan çalıştırmak istediğinizde ODBC hatası alabilirsiniz. Bu problemi çözmek için ya Denetim Masası üzerinden bir tane ODBC bağlantısı tanımlayın ya da Report_Sample.frx isimli dosyaya ait stringi resources içine gömüp gerekli değişiklikleri yaparak kullanın.

 

Herhangi bir problemle karşılaşırsanız yardımcı olmaya çalışırım.

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

 

Yorumlar

Bilal AFŞAR 21.3.2015 17:28
Merhaba Ali Bey,

Eğer sorduğunuz Generic List ile kullanımsa, elbette bu şekilde de kullanılabiliyor. Zira burada IDE ile bağlantı kurarken kullanmamız gereken RegisterData methodunun 8 overload'u mevcut. Bunlar DataSet, DataRelation, DataTable, DataView, IEnumerable tiplerinde verileri kabul ediyor. Generic List tipi de IEnumerable interface'i kullanılarak türetildiği için, bu interface'i kullanarak türetilmiş olan herhangi bir veri türünü göndermeniz mümkündür.
Ali KARA 21.3.2015 11:13
Sn. Bilal Bey,
Fastreport ile sadece datatable ile mi çalışıyor, yani object<list> şeklindeki bir datayı raporlayamaz mıyız...
Bilal AFŞAR 6.1.2015 01:47
Teyfik Bey, istediğiniz işlemle ilgili olarak yeni bir makale ekledim. Oradan işinize yarayacak bilgilere ulaşabilirsiniz.
Teyfik AYDIN 4.1.2015 22:17
Bilal bey bilgileriniz için çok teşekkür ederim.Fast report kullanıyorum Devexpress gridView de sütün başlıklarından filtreleme yapınca sadece seçili satırları yazdırmasını istiyorum.Fakat tüm vt deki kayıtlar geliyor.yardımcı olursanın memnun olurum.Tşk Ederim.
Bilal AFŞAR 25.10.2013 02:44
Selamlar Hasan Bey,

Daha önce FireBird kullanmadığım için maalesef net bir çözüm sunamıyorum. Kendi makinemde FireBird kurmuş ve FastReport.NET üzerinde FireBird bağlantı seçeneğini gösterebilmiş olmama rağmen FireBird'ün çalışma mantığını bilmediğim için daha ilerisine gidemedim. Bu yüzden size yardımcı olabileceğim temel nokta bu bağlantıyı nasıl oluşturacağınızı göstermek olacaktır. Nette yaptığım küçük bir araştırma sayesinde http://www.fast-report.com/en/download/fast-report-net/ adresinde, 'Data connections' başlığı altındaki dosyaya ulaştım. Bu dosyayı indirip içerisindeki readme dosyasındaki talimatları izlerseniz öncelikle size ait bir DLL dosyası verecektir. Bu DLL dosyasını oluşturmak için gerekli olan .NET Provider DLL'ini de FireBird'ün kendi sitesinden, kullandığınız Framework versiyonuna bağlı olarak seçip indirmeniz gerekiyor. DLL dosyasını oluşturduktan sonra da bağlantıyı kurabilirsiniz.
Hasan ÇOBANOĞLU 23.10.2013 16:56
Merhabalar Bilal AFŞAR
c# ile Fastreport aracılığıyla firebird dataya nasıl bağlantı kurabilirim yardımcı olursanız sevinirim...
İyi Çalışmalar
Bilal AFŞAR 15.8.2011 13:31
Merhabalar Said Bey,
Maalesef VB.NET üzerinde temel seviyede bilgi sahibi olduğum ve IDE üzerinde değilde doğrudan metin tabanlı bir platformdan kodları okuma zorluğu yaşadığım için buradan net olarak sorunuza cevap veremiyorum. Ancak elinizdeki hatayı içeren projeyi ya da aynı hatayı veren yeni oluşturabileceğiniz küçük örnek bir projeyi göndermeniz mümkünse bir sonuca ulaşmak için elimden geldiğince yardımcı olabilirim.
Spam iletilerle karşılaşmayı tercih etmediğim için e-posta adresimi buradan yazmayı tercih etmiyorum. E-posta adresimi doğrudan adresinize göndereceğim e-postayla size ulaştıracağım.
Said Dinç 15.8.2011 10:25
Sn. Bilal AFŞAR FastReport.Netle rapor almaya çalışıyorum. ancak bir türlü başaramadım. Kodlar aşağıda konu hakkında araştırıyorum ancak benim yapmak istediğim şekli ile yapılmış metodu bulamadım. Şöyleki verileri veritanabından fastreporta gönderip sonra rapor sayfasında sonucu görmek istiyorum ancak VeriDtSt: Tablo, veriye bağlanmaz. Veri kullanma raporunu kaydet. RegisterData metodu ile hatası ile karşılaşıyorum. yardımlarınız için şimdiden teşekkürler.
Private Sub PrntPvw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrntPvw.Click
MyOLECOnN()
OLEAdp2 = New OleDbDataAdapter(SqlLst, OLEConN)
FrxDtSet = New DataSet With {.DataSetName = "MACIPAdress"}
OLEAdp2.Fill(FrxDtSet)
FReport = New Report
FReport.Load(RprtName)
FReport.RegisterData(FrxDtSet, "VeriDtSt")
AdSydTObj = FReport.FindObject("AdSydTxt")
MstrDtBnd = FReport.FindObject("DataTbl")
MstrDtBnd.DataSource = FReport.GetDataSource("MACIPAdress")
TblDtSrc = FReport.GetDataSource("VeriDtSt")
For i As Integer = 0 To FrxDtSet.Tables(0).Rows.Count - 1
AdSydTClm.BaseName = FrxDtSet.Tables(0).Rows(i)(0).ToString
Next
FReport.Show()
FReport.Dispose()
DisConnect()
End Sub

Yorum Yaz

Adınız: *
E-Mail Adresiniz: *
Web Sitesi:
Yorum: *
Güvenlik Kodu: *
 
Tavsiye
Bağlantılar
Tavsiye Ettiğimiz Sunucu Hizmeti
Domain Hizmetleri