16 Aralık 2016 Cuma

C# ReportViewer Kulanımı




Arkadaşlar Merhabalar.

Bugünkü yazımda reportwiever nesnesinden bahsedeceğim. ReportViewer nedir ve ne  işe yarar ? Bazen geliştirdiğimiz uygulamanın sonucunda elde edilen veriler için raporlama ihtiyacını duyarız. Reportviewer bize bu imkânı veren çok kullanışlı bir yapıdır. Elde edilen verileri raporlayan, istediğiniz şekilde grafik olarak ekrana gösteren , verileri pdf ,excel gibi doküman şeklinde almanıza olanak sağlayan  , verilerinizi yazdırmanızı sağlayan bir yapıdır. Ama günümüzde daha çok  crystal report tercih edilmesine rağmen , reportviewer de kullanılır.

 Ben bu yazımda veritabanından verileri çekip raporlayan reportviewer den örnek bir uygulama yapacağım.Siz ihtiyacınıza göre kaynağı seçebilirsiniz.(2. resimde )


NOT: Arkadaşlar bazı visual studio sürümlerinde toolbox alanında  reporting sekmesinin altında reporviewer yok veya reporting sekmesi bulunmuyor.(genelde vs2015). Bunun için yapmanız gereken
Denetim masası->program kaldır->visual studio->kaldırmak yerine değiştire tıklayın->modify->sql server data tools u bulup işaretleyin-> sonra update diyin. Yaklaşık olarak 117 mb lık bir güncellemeden sonra visual studio yu yeniden açın. Toolbox sekmesinin altında reporting alanı gelmiş olmalı.


Şimdi Başlayalım :

**Bir c# projesi açın .Ben form aplication projesi açıyorum(web projesinde  de kullanılabilir).Ve toolbox ta reporting sekmesinin altında yer alan reportviewer i forma sürükleyip bırakın. Daha sonra resimde görülen yere tıklayıp design new report diyin.




**Database i seçip next diyin. Ondan sonra gelen ekranda Dataset i seçip next diyin.



**Dataseti seçip next dedikten sonra gelen ekranda  , server name(sql servera giriş yaparken kullandığınız)  girin.Data source kısmı resimde ki gibi olacak.Sonra test connectiona tıklayın.Bağlantı başarılı ise database adı için gerekli alan aktif olacaktır. Verileri çekmek istediğiniz database adını yazın. Bilgileri girdikten sonra tekrar test connection diyin. başarılı ise  ok deyip devam ediyoruz.



**Bundan sonra gelen ekrana nex diyip devam edin. Ondan sonra connection string ile alakalı bir ekran gelecek. Yes kutucuğunu işaretleyip devam edin.

** Bağlandığımız veri tabanındaki bilgiler ekrana gelecek. Oradan kullanmak istediğimiz tabloları veya diğer şeyleri tik atıp finish ediyoruz. Ben Adrestype tablosunu işaretledim.









**Böyle bir ekran gelecek. Name alanında DataSete verdiğiniz adı unutmayın. Kod alanında ihtiyacımız olacak. Next diyelim.



**Available field alanında yazanları sürükleyip value alanına bırakalım. Bunlar bizim kullanacağımız veriler. Yanlarında yer alan işarete tıklayarak işlemler de yaptırabilirsiniz. Toplam , ortalama gibi .next diyelim


**Gelen choose layout ekranında  tablolarımız olacak. Next diyelim.
**chose layout ekranından sonra choose style ekranı gelecek. İstediğiniz seçip next diyin.


**Bundan sonra görüntü aşağıdaki gibi olacaktır. Report1.rdlc  formumuz oluştu.



**Bu ekran üzerinde sağ tıklayıp insert deyip çektiğimiz verileri istediğimiz tablo da veya grafikte gösterebiliriz.



**Grafik eklediyseniz eğer(ben tabloyu seçip ekledim)  , sol tarafta dataset yazan alanda ki tablolardan  birini seçip , grafikte hangi alanda görüntülenmesini istiyorsanız oraya sürükleyip bırakın.Bu şekilde grafikte  nerede hangi verinin görüntülenmesini istiyorsanız ayarlayabilirsiniz




**Bundan sonra aşağıdaki gibi reportviewer için hazırladığımız raporu kaynak olarak gösterelim.



**Artık Koda geçelim. Dataset adını unutmayın demiştim.Burada kullanacağız.

Verileri çağırmak için yazdığım metod.

 -> ile belirtrilen yerde birşey yapmanıza gerek yok.Aynı kalsa da olur.Oluşturduğumuz Report1.rdlc proje içerisinde olduğu için , gerekli yolu  o şekilde gösterebiliririz

public void MyReport()
        {
            SqlConnection conn = new SqlConnection(@"Data Source=localhost; Initial Catalog=AdventureWorks2014; Integrated Security=SSPI ");
            conn.Open();
            try
            {
                this.reportViewer1.Reset();
             ->   this.reportViewer1.LocalReport.ReportPath =
                 (Application.StartupPath + "\\Report1.rdlc");
                DataTable tbl = new DataTable();
                SqlDataAdapter adap = new SqlDataAdapter("SELECT * FROM Person", conn);
                adap.Fill(tbl);
                ReportDataSource rds = new ReportDataSource("DataSet1", tbl);
                this.reportViewer1.LocalReport.DataSources.Clear();
                this.reportViewer1.LocalReport.DataSources.Add(rds);
                this.reportViewer1.LocalReport.Refresh();
                this.reportViewer1.RefreshReport();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Hata oluştu: " + ex.ToString());
            }
        }

bu olay altında çağırıyorum metodumu.. Formun load olayında ise otomatik olarak ReportRefresh olayının yer aldığını göreceksiniz. Bu oladyı için , formdaki ReporViewera tıklayın.Ona ait olaylar içerisinde ReportRefreshi bulup tıklayın...yada bunu kopyalayıp kullanabilirsiniz.

  private void reportViewer1_ReportRefresh(object sender, CancelEventArgs e)
        {
            MyReport();
        }


**Uygulamayı çalıştırınca oluşan görüntü bu şekilde. Reportviewer üzerinde butonları kullanarak pdf ,exel vb olarak alabilir veya yazıcıdan  çıkarabilirsiniz.





Başka projeleri kaynak kodları ile beraber github adresim  https://github.com/bhtyrsm   da bulabilirsiniz.
Umarım faydalı olmuştur .Kolay gelsin

11 yorum:

  1. raport vievde arama işlemi nasıl yapılır

    YanıtlaSil
    Yanıtlar
    1. Filter inc C# ReportViewer diye aratırsan bir çok görsel kaynak bulabilirsin

      Sil
  2. Bu yorum yazar tarafından silindi.

    YanıtlaSil
  3. reportviewer da design a new report kısmı bende gelmiyor sorun ne olabilir?

    YanıtlaSil
    Yanıtlar
    1. sql server data tool u kullandığın visual da yoksa eğer , visual studioya kurup güncelle. sonra tekrar dene ..En başta yazdığım yöntemi deneyebilirsin.

      burayada bakabilirsin : https://msdn.microsoft.com/en-us/mt186501

      Sil
  4. Merhabalar,
    Report Viewer Ile 10 Adet Parametre Kullanmak Istiyorum.
    Parametre Tanimladigimda Tum Textbox' lar Uzerinde Deger Olmasi Gerekmektedir.
    Ama Ben Belirttigim Veri Girdigim Textbox Ile Where Yapmak Istiyorum.
    Bu Islemi Nasil Yapabilirim ?

    YanıtlaSil
    Yanıtlar
    1. Yanlış mı anladım bilmiyorum ama , zaten ReportParameter dizisi tanımlayıp ,textboxlardaki değerleri bu parametre dizisi üzerinden forma gönderiyorsun.Where den kasıt filtreleme ise , yani gönderdiğim parametrelere göre filtrelesin diyorsan

      https://social.msdn.microsoft.com/Forums/en-US/766a216d-4b07-4139-8202-59d69322725d/how-to-filter-rdlc-report-data-using-parameter?forum=winforms

      bu örneğe bakabilirsin

      Sil
    2. Bu yorum bir blog yöneticisi tarafından silindi.

      Sil
    3. burda bir örnek var.
      https://www.codeproject.com/Questions/605365/ReportViewerplusandplusfiltering
      bu tarz birşey işte

      Sil
  5. merhaba asp.net projemde bulunan reportviewer nesnesi kendi masa pc de çalışıyor fakat publish yapıp localde bulunan sunucuya attığım zaman hata alıyorum bunun nedeni nedir acaba

    YanıtlaSil
    Yanıtlar
    1. Aldığın hata ne ? db ye mi erişemiyorsun.?

      Sil

DataTable To List Object - C#

Merhaba Arkadaşlar , Daha önce kullandığım kısa bir kod parçasını sizinlede paylaşmak istedim.  Elimizde bulunan bir Datatable ı nasıl ...

Popüler Yayınlar