Makale Özeti

Parametrelere çoktan seçmeli değerler verip, parametreyi bir ComboBox'a nasıl çevirebileceğimizi görelim.

Makale

REPORTING SERVICES – Raporlarda Parametre Kullanımı 2

    Parametreleri nasıl ekleyebileceğimizi önceki makalede inceledik. Şimdi ise, parametrelere çoktan seçmeli değerleri nasıl verebileceğimizi görelim.

    ComboBox'ın bir çok avantajı vardır; kullanıcıya neler girebileceğini gösterebilir, veri girişlerini sınırlayarak istenmeyen değerlerle raporun çalışmasını engeller, vb...

    Öyleyse, raporumuzaa koymayı planladığımız ComboBox'taki değerlerin neler olacağına karar vermeliyiz. Bunun bir kaç yöntemi var. Girilebilecek değerleri raporun içine gömebileceğimiz gibi, veritabanından da çekebiliriz. Hatta bir çok raporda, veritabanından çekilen değerler daha kullanışlı bir hal almakta. Biz de ComboBox değerleni veritabanından nasıl alacağımızı inceleyeceğiz.

    Öncelikle yapmamız gereken bu değerleri veritabanından alacak dataseti oluşturmak.  Örneğime bir önceki makalede anlattığım raporun üzerine devam ediyorum. Rapora yeni bir dataset ekleyip içerisine Northwind veritabanından kategorileri alacak sorguyu yazıyorum: "Select CategoryName, CategoryID from Categories"

    DataSet2 adındaki datasetimiz kategorileri ve adlarını veritabanından alacaktır. Yapmamız gereken bunları parametre değeri olarak bind etmek (bağlamak). Bu işlem için, ana menüden Report > Report Parameters'ı seçiyorum. Bu pencerede,  "Available Values" bölümünde, "from query"i seçiyoruz. Dataseti az önce yarattığımız DataSet2, "Value Field"i CategoryID, "Label Field'ı CategoryName olarak seçiyorum.

    OK ile çıktıktan sonra CategoryID parametresini çoktan seçmeli bir ComboBox haline getirmiş olduk. Raporu görüntüleyip sonucu inceleyelim.

    Evet, artık CategorID parametresine belirlediğimiz değerler dışında bir değer girilemez. Rapor, seçtiğimiz parametre değerine göre çalışacaktır. Fakat bir noktayı atladık. Sorumuz:  kategorilere göre ürün dağılımları neler? ve bu soru için raporumuz oldukça güzel çalışıyor. Bütün ürünlerin fiyatları ve stok durumları neler? Sorusunda raporumuz yetersiz kalıyor. Öyleyse, CategoryID parametresinde, özel bir değer kullanalım. Örneğin "<all>".

    Parametrenin değerlerini queryden alıyorduk. Öyleyse <all> değerini de queryde eklememiz gerekli. DataSet2'yi düzenleyip şu şekilde bir query yazalım:

    Veritabanından gelen değerlere ek olarak 0,<all>  değerini de ekledik. Öyleyse artık CategoryID parametresinin değerlerinde bir de <all> olacak.

   

 

    Peki, ürünlerimizin bilgisini veritabanından çeken querye 0,<all> değeri giderse ne olacak? Elbette şimdiki haliyle 0 numaralı kategoride ürün olmadığı için hiç ürün gelmeyecektir. DataSet1'in querysini çalışma anında oluşturmamız gerekli. Bunun için queryi bir text ifadeye çeviriyoruz. Parametre değeri <all> olduğunda bir where conditon eklememesi için ise, aşağıdaki şekilde bir IIF yazıyoruz.

    Eğer CategoryID parametresinin değeri 0 dan farklı ise, where condition querye eklenecektir. 0 ise, boş string eklenerek yalnızca "select * from products" querysi çalışacaktır.

    Raporun son görünümüne bakalım.

    Eğer <all> değeri seçilirse, tüm ürünler listelenecektir.

    Parametrelerin sayısı istenildiği kadar arttırılabilir ve de birbirleri ile etkileşim halinde olabilirler. Örneğin, il parametresinden İstanbul seçildiğinde, ilçeler parametresinde yalnızca İstanbul'a ait ilçelerin görünmesi gibi.

 

 

İyi çalışmalar

Kivanc Ozuolmez