Yazının 4.bölümünde bir rapordan başka bir rapora atlamayı, alt rapor oluşturmayı ve en çok kullanılan parametrik raporları işleyeceğiz. Bazı karmaşık raporlarda raporlar arasında bağlantı kurup bir rapordan diğerine atlanılmak istenilebilir. Ana rapordan alt rapora (sub report) geçmek için link oluşturulur. Bir linki oluşturmak için Layout üzerindeki kontrole ait Properties penceresinden Action özelliği kullanılır. Link tıklandığı zaman diğer rapora geçmek için üç yöntem sunulur. Bunlar aşağıdaki şekilde gösterilmiştir.
None seçeneği bu kontrolün link olmadığını yani tıklanmayacağını belirtir.
Jump to report seçeneği proje içerisindeki başka bir rapora atlamak için kullanılır. Bu seçenek seçildiği zaman alt listede projedeki diğer raporlar listelenir. Parameters bölümünden rapora parametre olarak gönderilebilir veya fx tıklanarak önceki paragrafta bahsettiğimiz koleksiyon değerlerinden biri parametre olarak gönderilebilir.
Jump to bookmark seçeneği html sayfa tasarımından hatırlayacağımız üzere aynı rapor içerisinde başka bir alana atlanılmasını sağlar. Bu seçeneği seçtiğimizde alt tarafta raporda atlanılabilecek alanlar listelenir.
Jump to URL seçeneği girilmiş olarak URL adresine gidilmesini sağlar.
Parameterik Raporlar
Son olarak sayfanın başında sorgusunu verdiğimiz parametrik yapıdan bahsedelim. Raporu parametrik yapmak için sorgu içerisinde @ ile başlayan parametreler tanımlanır veya global parametre tanımlanabilir. Rapor üzerindeki parametreleri düzenlemek veya yeni parametre tanımlamak için VS.NET içerisindeki üst taraftaki Report bölümünden Report Parameters tıklanır. Bu bölümde parametrenin null olup olamayacağı, uyarı mesajının ne olacağı, default değerinin olup olmayacağı, dataset/global alanlarından gelip gelmeyeceği gibi bilgiler düzenlenir.
SELECT * FROM Musteri WHERE Sehir=@Sehir
Raporu beslediğimiz Dataset’in sorgusunu bu şekilde düzenlediğimiz otomatik olarak rapor için Sehir isimli parametre oluşturulacaktır. Bu ve daha sonra oluşturacağımız parametreler hakkında bilgiyi “Report » ReportParameters” menüsünden görülebilir.
Bu ekranda parametreler ilgili metin bilgisi (prompt), veri tipi (Data type), adı ve null kabul edip etmeyeceği gibi bilgiler düzenlenebilir. Bu ekrandaki en önemli alan parametre için muhtemel değerlerin belirlenmesidir. “Available values” bölümünde değerleri elle girebileceğimiz gibi bir sorguya da bağlayabiliriz. “Non-queried” seçeneğini işaretleyip Label ve Value bölümlerine kullanıcının seçebileceği değerleri girelim Örneğin şehirleri isimleri ve varsa kodlarıyla birlikte bu alana girebiliriz.
Bu durumda kullanıcıya aşağıdaki gibi tercihler sunulur.
Az değerli parametreler için muhtemel değerleri elle girmek mantıklı olsa da parametreleri doğrudan veritabanından beslemek daha doğru olacaktır. Bunun için “Available values” bölümünden From query seçeneği işaretlenir ve listenin hangi dataset’ten besleneceği seçilir. Bu işlemden önce tasarım tarafına geri dönüp Data bölümünde yeni bir Dataset oluşturalım. İsmini DsSehir verdiğim bu veri kümesinin sorgusunu aşağıdaki gibi düzenledim.
SELECT DISTINCT Sehir FROM Musteri WHERE NOT Sehir IS NULL
Böylece Musteri tablosundaki Sehir kolonundaki değerleri listenmiş olacaktır. Report Parameters bölümüne geçip DsSehir veri kümesini seçiyorum.
Şimdi raporumuzu MusteriId isimli yeni bir parametre ekleyeceğiz. Ama bu parametredeki değerler Sehir parametresinin seçimine bağlı olacak. Yani hangi şehir seçildiyse onun müşterileri listelenecek oradan seçilmiş olan müşterinin bilgileri gelecek. Bunun öncelikle raporun beslendiği ana dataset’in sorgusunu şu şekilde değiştiriyoruz.
SELECT * FROM Musteri WHERE MusteriId=@MusteriId
Ek olarak müşterileri şehir bazlı listeleyen bir dataset hazırlayacağız. Bu dataset’e DsMusteri ismini veriyorum.
SELECT DISTINCT MusteriId, AdSoyad FROM Musteri WHERE Sehir=@Sehir
Parametreler bölümüne geçip MusteriId parametresini DsMusteri veri kümesine bağlıyoruz.
Rapor ilk çalıştığında “Müşteri Id” giriş kapalı olacak. Her şehir seçildiğinde bu liste seçilen şehir değerine göre düzenlenir.
Çok Seçmeli Parametreler
“Report Parameters” ekranında Properties bölümünde “Multi-value” seçeneği işaretlenerek çoklu seçim yapılmasına izin verilebilir. Örneğin son kullanıcının birden fazla şehir seçmesine izin verelim. Bunun Sehir parametresinin “Multi-value” seçeneği işaretlenir. Ardından Müşterileri listeleyen dataset’in dışarıdan çoklu parametre alabileceği şekilde değiştirmeliyiz. Bunun için bilindiği gibi T-SQL’de IN ifadesi kullanılır. Sorgumuzu aşağıdaki gibi değiştirelim.
SELECT DISTINCT MusteriId, AdSoyad FROM Musteri WHERE Sehir IN (@Sehir)
Bu durumda rapor ekranı aşağıdaki gibi liste içerisinde chexbox’lı olacaktır.
Bu örnekte Ankara ve İstanbul seçildiği için SQL Server’e aşağıdaki srogu gidecektir.
SELECT DISTINCT MusteriId, AdSoyad FROM Musteri WHERE Sehir IN (N'Ankara ',N'İstanbul ')
Rapor içerisinde kod yazarken parametre koleksiyonundan bir parametreye erişmek aşağıdaki sözdizimi kullanılır.
Parameters!MusteriId.Label veya Parameters!MusteriId.Value
Parametre örneğimizdeki Şehir gibi çok seçmeliyse dizi gibi yorumlanmalıdır.
Parameters!Sehir.Value(0) veya Parameters!Sehir.Label(0)
Bir rapordan ikinci bir rapora parametre de gönderilebilir. Şu şekilde bir örnek yapalım. İlk raporumuzda tablodaki şehirleri listeleyelim. İkinci raporda ise ana raporda tıklanmış olan şehrin müşterilerini yazdıralım. Öncelikle ikinci raporda Şehir parametresi tanımlayacağız ve sorguyu ona göre düzenleyeceğiz. Ardından ana raporda her satırı link haline getiriyoruz. Bunu yapmak için sözkonusu kolon sağ tıklanır Properties bölümünden “Textbox Properties” penceresi açtırılır. Bu pencerede Navigation sekmesinde Hyperlink action bölümünden “Jump to report” seçeneği işaretlenir. Açılan listeden ikinci rapor seçilir. Yan taraftaki Parameters düğmesini tıklayıp ikinci rapordaki parametrelere ulaşıp onlara değer atayabiliriz. Böylece iki rapor arasında bağlantı kurulmuş olur.
Merhabalar,
Öncelikle makaleleriniz için çok teşekkür ederim, çok yardımcı oldu. Bir sorum olacaktı:
İki tarih arasındaki istatistik veri çekmek istiyorum.
Deploy ettiğim bir raporu, reportviewerda gösterip , arayüzden parametre vermek istiyorum. Reportviewer ın reportserverurl ve pathini ayarladım, fakat hata veriyor. Datasetim kullandığım web projesinde olmadığı için mi? bunun bir çözümü var mı?
teşekkür ederim
İyi günler
Teşekkürler Tekrardan
Merhaba,tam olarak sorunuzu anlayamadım. Nasıl bir hata verildiğini yazabilirseniz daha iyi yardımcı olabilirim. Parametre oluşturma aşamasına mı takıldınız.
Merhabalar;
Desktop bir projemde kullanmak üzere SQL de CariKart ve CariHareket tablosu yaptım.
ReportViewer daha önce kullanmadığım için nasıl yapılacağını maalesef bilmiyorum.
Araştırmalarımla net bir sonuca ulaşamadım yardımcı olursanız memnun olurum.
Raporda gösterilmesini istediğim alanlar
CariKart da ; Unvan, Telefon, Fax, VergiDairesi, VergiNo, Adres
CariHareket te ise; X şirketine ait olan cari bilgilerinin tamamı yada tarihe göre filitrelenmiş hali
Özetle X şirketinin CariHareket bilgilerinnin tümünü ve / veya belirtilen tarih aralığındaki bilgileri raporlamak istiyorum.
Gerekli kod bloğunun nasıl olacağı konusunda yardımınıza ihtiyac duymaktayım.
Saygılar sunarım…
Merhaba Gencer,
ReportViewer bileşenini Form üzerine taşıyıp bir Dataset’e bağlanman yeterli olacaktır. Dataset için de SQL Sorgusunu yazman gerekecek.
aşağıdaki video yardımcı olabilir.
https://www.youtube.com/watch?v=qNjL_vQOZjQ