C# da form uygulamalarında kullandığımız ReportView in kullanımını inceleyeceğiz. Dinamik olarak id aralığına göre, yada herhangi başka kolon için kısıtlama belirterek istediğimiz şekilde raporlama yapabilir, daha sonrasında ise, ReportView in bize sunduğu hazır seçenek ve kütüphaneler ile excel, word, pdf olarak kaydedebilir, yada çıktı alabiliriz
İlk olarak uygulamamız için bir form uygulaması açıp, uygulamamıza ReportView ekleyelim.
Daha sonra reportview in köşesindeki ok işaretine tıklayıp, yeni bi rapor dizayn edip, report view imizde bunu kullanacağız.
Database seçili iken Next diyip devam ediyoruz
Dataset seçili iken Next diyip devam ediyoruz
İlk kez bu işlemi yaptığımızdan dolayı yeni bir bağlantı ekliyoruz, daha sonraki işlemlerimizde yine bu bağlantıyı kullanabiliriz.
Şimdi ise açılan pencereye kendi veritabanımıza göre bilgilerimizi girip, en son ise bağlantı bilgilerinin doğruluğunu test etmek için Test Connection butonuna basıyoruz. Eğer aşağıdaki gibi sonuç başarılı olursa işlemlerimize devam ediyoruz. Eğer hata ile karşılaşırsanız bağlantı bilgilerini kontrol edip tekrar deneyiniz
Artık veritabanı bağlantımız oluştu. NEXT diyerek işlemlerimize devam ediyoruz.
Bağlantımıza istediğimiz bir isim veriyoruz ve NEXT diyerek devam ediyoruz
Şimdi ise raporumuzda kullanacağımız tabloları yada view leri seçip, Dataset e de bir isim atayarak işlemlerimize devam ediyoruz
Şimdi burdan dataset imize bir isim veriyoruz. Bu ismi unutmayalım, bunu kod tarafında dinamik işlemlerimizde de kullanacağız.
Burdan ise kendi raporlamamıza göre satır ve sütunları gruplayabilir, toplam alabiliriz. Daha sonra bunu el ile de yapabiliriz. Ben hepsini datatable da gösterir gibi göstermek için satır-sütun gruplaması yapmadım
Görsellik ayarlarını bir önceki seçtiğiniz kolonlara göre şekillendirme yapabilirsiniz, daha sonra dinamik olarak sorgu içerisinden de diptoplam vs. işlemini SQL sorguları çerçevesinde yapabilirsiniz
Burdan rapordaki görsel farklı stilleri seçebiliriz. Son olarak da FİNİSH butonuna basarak işlemlerimizi tamamlıyoruz
Oluşturduğumuz rapor dosyasına sağ tıklayıp insert dedikten sonra raporumuza ekleyebileceğimiz seçenekler listelenecektir. Bunlardan istediğimizi seçerek istediğimiz şekilde raporlama yapabiliriz. İstersek tablo olarak, istersek grafik olarak... değişik değişik şekillerde raporlama yapabiliriz.
Şimdi de kod tarafında raporda ne göstereceğimizi özel sorgumuzla belirleme kısmına göz atalım. Kodumuza bağlantıda kullanacağımız bir SqlConnection, birde rapora istediğimiz query sonucunu yollayacak olan fonksiyon ekliyorum
SqlConnection conn =
new
SqlConnection(
@"Data Source=.\FAUK; Initial Catalog=deneme; User Id=sa; password=1;"
);
public
void
ReportViewDoldur_yenile()
{
try
{
this
.reportViewer1.Reset();
this
.reportViewer1.LocalReport.ReportPath =
(Application.StartupPath +
"\\Report1.rdlc"
);
DataTable tbl =
new
DataTable();
SqlDataAdapter adap =
new
SqlDataAdapter(
"SELECT * FROM tbKisi"
, conn);
adap.Fill(tbl);
ReportDataSource rds =
new
ReportDataSource(
"DataSetFK"
, 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());
}
}
Koddaki Report1.rdlc dosyasının yolunu belirtirken kendi projenizdeki dosya yolunun doğru olduğuna dikkat edelim. Ben burda ilgili dosyayı, çalıştırılan proje exe si ile aynı dizine koyduğum için
this
.reportViewer1.LocalReport.ReportPath =
(Application.StartupPath +
"\\Report1.rdlc"
);
şeklinde kullandım. Ama sizde bu farklı olabilir. Onu değiştirmeyi unutmayın. Bunun yanında query kısmını da istediğiniz şekilde renklendirebilirsiniz. isterseniz belirli id aralığını alabilir (where id<17 AND id>11) yada sorguyu belli bir kolona göre sıralayabilir (order by yas) ... yani sql deki herşeyi query kısmında yapabilirsiniz. Çalıştırdığınızda da rapor buna göre şekillenecektir. İsterseniz de form a textbox koyup bu değerleri kullanıcıdan alabilirsiniz. Yukarıda oluşturduğumuz ReportViewDoldur_yenile() fonksiyonunu nerde çağırırsak rapor yeniden oluşacaktır. Ben raporun yenileme butonuna ekledim
private
void
reportViewer1_ReportRefresh(
object
sender, CancelEventArgs e)
{
ReportViewDoldur_yenile();
}
Sizde istediğiniz yerden bu fonksiyonu çağırabilirsiniz. İsterseniz Form1_Load() dan raporun açılışında da direk olarak raporu doldurabilirsiniz. Son olarak da projemizi çalıştırıp reportView den yenile butonuna bastığımızda raporumuzun yenilendiğini göreceğiz.