ReportViewer’da Custom Code kullanmak bazen hayat kurtarıyor. Ufak bir örnek vermek gerekirse.
VS.NET’te
raporunuz.rdlc ye tıklayıp dizayn modunda açtığınızda Rapor
Özelliklerine girin. Açılan Pencerede Code bölümü var. Buraya .NET ile
istediğiniz fonksiyonu veya class’ı yazıp raporun çalışma zamanında rapor
kontrollerinde atraksiyon yapabilirsiniz. Sadece VB.NET desteği
var. Eğer vb.net yazmam diyosanız kendiniz herhangi bir .net dilinde Sınıf Kütüphanesi (class Library) oluşturup hemen
yanındaki Tab’da References kısmından ekleyebilirsiniz. Mümkünlü :P (Mümkünsüz değil. Bayburtlu Osman AKBAŞ’ı saygı ile anıyorum :)
Senaryom:
Fabrika da kolilerin üzerine etiket yapıştırıyorlar. Bu etikette ürün
kodu bulunuyor. Fakat ürün kodu çok değişken 4 haneden 16 haneye kadar
değişiyor bu değişkenlikte çıktı alırken ürün kodu kısa olursa etikete göre çok küçük kalmasını sağlıyor. Bunu aşmak için Code penceresine vb. ile şu kodu yazdım.
Function YaziBoyut(Boyut As Integer) As Integer
Dim Punto As Integer
Dim Karakter As Integer
Punto = 28
Karakter = 16
YaziBoyut = ((Punto/Boyut)*Karakter)
End Function
16 hanede 28 punto etiket kağıdına tam sığıyor. Bende bunu baz alarak yukarda ki gibi bir formul yazdım.
Kullanırken de TextBox kontrolünün FontSize özelliğinin deyimin de (Expression) aşağıdaki gibi bir cümle kurdum.
=Code.YaziBoyut(Len(First(Fields!UrunKodu.Value, "DataSetim"))).ToString() &"pt"
Burdaki Code, Custom Code’a ulaşmak için arkasından Len ile
Field’ın karakter uzunluğunu bulup YaziBoyutu fonksiyonuma atadım
ardından string’e çevirip arkasına sözdizimine uysun diye pt koydum
sonuç olarak Npt diye bir şey çıkıyor.
Tabi işlem daha çok sadeleştirilebilir örneğin fonksiyonun içinden direkt string döndürülebilir ama böyle sevdim ;)
Alaka : http://msdn2.microsoft.com/en-us/library/bb395166.aspx (ReportViewer ile ilgili çok güzel ipuçları)