Eki
28
2011

Report Viewer Tool #2


Merhaba arkadaşlar,

bu yazımda kendim 4 tabloluk okul adında veri tabanı hazırladım. Bu tabloları oluşturduğum DataSet’e aktardım. Dataset’imin ismini DataSetOkulDB olarak değiştirdim .Son hali resimde gözükmektedir arkadaşlar.

Peki simdi diceksiniz , database kullanılıyor , bunu nasıl göstericeksiniz report view’da. Öncelikle bu işlemleri yaptıktan sonra projemize sağ tıklayıp add new item diyoruz orada karşımıza “Report” dosyası gözükücek uzantısı Report1.rdlc ‘dir. Bu report bölümü görsellik ile ilişkilendirilerek bize ne istiyorsak onu sunuyor. Oluşturduğumuz datasetin içinden kullanacağımız tabloları tek tek ekliyoruz.

Ben bu eklediğim report.rdlc dosyasının ismini daha anlaşılır bir isim ile değiştirerek ReportOkul.rdlc yaptım. Bu dosyayı açtığımızda karşımıza boş bir alan çıkıcak bu beyaz alanın dışına sağ tıklayıp dilerseniz Header ve Footer ekleyebilirsiniz. Bende bunları sizlere göstererek nasıl bir ara yüze sahip olacağımızı anlatacağım. Bu dosyanında bir tools seçeneği var dilerseniz texbox, dilerseniz matrix, dilerseniz table koyma imkanlarınız mevcuttur ve view bölümünden Report Data seçeneğinide açmayı unutmayın kısa yolu “ctrl+alt+d “ iledir.

Dataset’e  koyduğumuz tabloları tek tek eklememiz gerekiyor. Report Data Seçeneğine geliyoruz ve New Bölümünden DataSet… sekmesine tıklıyoruz.



Buraya tıkladıktan sonra açılan tablodan Datasetimizi seçip aşada çıkan tabloları tek tek aynı ya da farklı isimler girerek rapor dosyamızın içine atıyoruz.

Son hali resimdeki gibi oluyor. Artık Dataset’in içindeki tablolar eklenmiş durumda ve Header ve Footer özelliklerinide artık raporumuzda görebiliyoruz.Simdi yapmamız gereken şey görselliği düşünerek 2 tane tablo ve ogretmenin ozellikleri gösterebilecek 3 ya da 4 tane texbox koymak olucak. Öğretmenin özelliklerini Header bölümünde göstericem. Footer Bölümünde ise çıkan sayfanın kaç sayfadan oluştuğunu yazmasını isticem.

İlk olarak Toolbox’dan table aracını sürükleyip body bölümüne ekliyoruz. Eklediğimiz table özelliğinden bu table’da hangi değerlerin çıkmasını istiyorsak onun tablosunu DataSetName bölümüne ekliyoruz. Ben 2 tane table oluşturdum bu tablelardan birtanesi öğrenci tablosu diğeride ders tablosu oluyor. Çünkü sql komutu ile çağırdığımda istediğim değerlerin gözükmesi gerekmektedir.

 

Öğretmen bilgisini için header bölümüne 3 tane texbox koydum ve onları hangi değere işaret edeceğini DocumentMapLabel seçeneğinden belirleyip seçiyorum . O texbox sadece belirlediğimiz değeri göstericek.

Diğer bir özellikte footer bölümü için geçerlidir sadece sayfa sayısını göstermektedir. Bunu yapmak için oluşturduğumuz texbox’a sağ tıklayıp expression seçeneğine tıklıyoruz ve Built-in-Fieds kategorisine tıklıyoruz oradanda TotalPages değerine çift tıklayarak işlemimizi gerçekleştiriyoruz.

Report dosyamızın son hali :

Yapacağımız son 2 adım kaldı.Sql komutu ile istediğimiz değerleri çağırıcaz ve daha sonra kod kısmında da oluşturulan method ile raporumuzu göstericez.

Bunun için hangi tablodan cağırmak istiyorsak onda sql komutu oluşturmamız gerekiyor. Sql komutumuzu dataset’in içinde belirleyici bir tablo seçip ona örnek alarak yapmanızı öneririm. Benim veritabanımda kayit tablosuna bağlandığı için dersler,öğretmen ve öğrenciler, ben kayıt tablosunu baz alarak yapıcam. Yapmamız gerekenleri resimlerle aşama aşama açıklıyorum.

Dataset’in içindeki kayıt tablomun adapter bölümüne gelip sağ tıklıyorum ve add query diyorum. Daha sonra çıkacak tabloda  “use sql statements” seçeneğini işaretliyip next diyorum. Diğer adımda ise “select which returns rows” seçeneğini işaretliyip next diyorum ve sql yazılacak alan çıkmış oluyor.

 

 

 

 

 

 

 

Sql komutumuzu buraya yazıyorum isterseniz Query Builder’dende hangi değerleri isteyip istemediğinizi seçip daha kolay bir şekilde ayarlayabilirsiniz. Bunuda tamamlayıp next diyorum. Son aşamada adapter tablosundan cağıracağımız için başka bir isme benzemeyecek unique bir isim belirleyip get ve fill methodlarına yazıyorum ve finish diyorum. Eğer bir hata çıkarsa bu sadece sql komutunu yazmadaki yanlış ya da atalamadan dolayı olucaktır.

Bunları bitirdikten sonra artık kod kısmına geçiyoruz , ben direk formun load kısmında önceden oluşturduğum verileri getiricem, öğretmen id’si 112 olan hocanın 3 tane bilgisini ve bu hocanın dersini ya da dersleri hangi öğrencilerin aldığını gösteriyorum. Kodlar icinde açıklamalarıma devam edicem.

private void Form1_Load(object sender, EventArgs e)

{

try

{

reportViewerOkulReport.Clear();//oluşturduğum view araçındaki componentleri temizliyoruz.

 

DataSetOkulDBTableAdapters.KayitTablosuTableAdapter kayit = new  DataSetOkulDBTableAdapters.KayitTablosuTableAdapter(); // kayit tablosunda yaptığım için  birleştirmeyi ve sql komutumu o yüzden adapter olarak kayit tablosunun örneğini getiriyorum.

 

DataSetOkulDB.KayitTablosuDataTable kayittable = new DataSetOkulDB.KayitTablosuDataTable();// daha sonra hangi tabloda birleşeceği ve gösterileceğini o tablonun data table objesi ile getiriyorum.

kayit.FillByOgretmenID(kayittable, 112);//oluşturduğum unique isimi burada fill method olarak getiriyorum ve kendim belirlediğim kayıt numarasını direk yazıyorum.Daha sonra hangi data tableda oldugunu belirtmek için oluşturduğum kopya table ekliyorum.

 

reportViewerOkulReport.LocalReport.DataSources.Clear();//local report alanını siliyoruz bir öncekiler silinsin diye  var ise.

 

ReportDataSource new1 = new ReportDataSource(“OgrenciTablosu”, (DataTable)kayittable);

ReportDataSource new2 = new ReportDataSource(“DersTablosu”, (DataTable)kayittable);

ReportDataSource new4 = new ReportDataSource(“KayitTablosu”, (DataTable)kayittable);

ReportDataSource new3 = new ReportDataSource(“OgretmenTablosu”, (DataTable)kayittable);

//oluşturduğum 4 tane tablo için ayrı report data source kopyaları ekliyorum çünkü local olarak çalıştığı için onların data sourcelarına ihtiyacı var.

 

reportViewerOkulReport.LocalReport.DataSources.Add(new3);

reportViewerOkulReport.LocalReport.DataSources.Add(new1);

reportViewerOkulReport.LocalReport.DataSources.Add(new2);

reportViewerOkulReport.LocalReport.DataSources.Add(new4);

//localreport bölümüne taker taker 4 tane tablyu ekliyorum refresh yapıyorum local reporta değişiklik var mı diye ve en son report view aracımıza refresh uyguluyoruz yeni verileri görebilmek için bunu yapmazsak herhangi bir kayır göremeyiz.

reportViewerOkulReport.LocalReport.Refresh();

reportViewerOkulReport.RefreshReport();

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

}}

Programımızın direk çalıştığındaki son durumu. Siz bunu daha farklı yapabilirsiniz size kalmış bir şey. Oluşturulan raporun içinde arama yapabilirsiniz araçın kendisine ait özelliklerinde bulunmaktadır ve refresh seçeneği ilede yen bir kayıt geldiyse yenileyip raporun son halini görebilirsiniz. Dosyalama seçenekleride mevcuttur sayfa yapısının yanındaki sekmeye tıklarsanız excel, pdf ve word şeklinde kaydetme seçenekleride görebilirsiniz.

 

Yorum yapabilirsiniz..

Yazar : Hakan Özler

En son haber ve ücretsiz eğitimlere ulaşmak için üye olabilirsiniz