Makale Özeti

Bu makalede Dataset içerisinden data göndererek Crystal Report dökümanı nasıl oluşturacağımızı göreceğiz. Çok fazla metinsel açıklama yapmaktansa bir örnek üzerinden adım adım gitmenin konunun anlaşılması bakımından daha iyi olacağını ve daha faydalı olacağını düşündüğüm için bir örnek üzerinden sizlere bu konuyu aktaracağım.

Makale

Visual Studio 2005 ile DataSet Kullanarak Crystal Report Raporları Oluşturmak

Crystal Report Visual Studio içerisinde kısıtlı ücretsiz olarak gelir ve en popüler raporlama araçlarından birisidir.
Bu makalede Dataset içerisinden data göndererek Crystal Report dökümanı nasıl oluşturacağımızı göreceğiz. Çok fazla metinsel açıklama yapmaktansa bir örnek üzerinden adım adım gitmenin konunun anlaşılması bakımından daha iyi olacağını ve daha faydalı olacağını düşündüğüm için bir örnek üzerinden sizlere bu konuyu aktaracağım. Crystal report ile raporlama yapmak ne kadar kolay gözükürse gözüksün raporların çalışma zamanlarında  verdiği hatalardan dolayı oldukça zordur. Crystal rapor'da verikaynağını rapora vermenin birçok yolu vardır bu makalede dataset ile veri kaynağını vereceğiz bunun nedeni ise veritabanındaki değişikliklerden minumum etkilenmek ve yazdığımız raporun taşınabilir olmasıdır. Çünkü veritabanında oluşan değişikler için (tablo ismi değişikliklerden tutunda veri tabanının isminin değişmesine kadar) bazen tüm raporu yeniden tasarlamamız gerekebilir. Dataset ile veri kaynağını verirsek veritabanında yapılan değişikliklerde dataset üzerine yansıtırken rapor üzerinde hiç bir değişiklik yapmadan değişiklikleri rahatlıkla yapabiliriz.


Öncelikle Crystal rapor içerisindeki raporlayacağımız veri aşağıdaki gibi olsun.
 

Mehmet Ali Ecer İstanbul Teknik Üniversitesi 2,71
Mesut Gürbüz Erciyes Üniversitesi 3,00
İlhan Aydın Yıldız Teknik Üniversitesi 3,20
Taner Birlik Yıldız Teknik Üniversitesi 3,50
Serhat Ünlü İstanbul Teknik Üniversitesi 2,12
İhsan Birekul İstanbul Teknik Üniversitesi 3,54
Melih Özdemirkan Erciyes Üniversitesi 2,30
Çetin Yılmaz Niğde Üniversitesi 3,20
Ahmet Boyraz Niğde Üniversitesi 3,10

Projemiz üzerine Add New Item diyerek bir dataset ekleyelim.

Bu eklediğimiz dataset üzerine yukarıdaki tablodaki verileri yazacağımız datatable mızı ekleyelim. Burada önemli olan eklediğimiz sütunlara veriler ile uygun tipleri vermektir. Yukarıdaki tabloda decimal olarak gösterilen mezuniyet notları için oluşturacağımız datacolumn veri tipini şekildende anlaşılacağı gibi Sytem.Decimal olarak vermemiz gerekmektedir.

 

Veritabanından çektiğimiz verileri dataset üzerine atalım.

    DataSet ds = new DataSet();
    System.Data.SqlClient.
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConString"].ToString());   
    System.Data.SqlClient.
SqlDataAdapter ad = new SqlDataAdapter("select * from Staff", con);
    DataSet1 dsCrystal = new DataSet1();
    ad.Fill(dsCrystal);

Şimdi raporumuzu oluşturup oluşturduğumuz dataset e bağlayabiliriz. Rapor oluştururken as a blank report seçmemiz gerekiyor.



 

Raporumuz oluştuktan sonra raporun database expert kısmından Project Data -> ADO.NET DataSets içerisinden az önce oluşturduğumuz dataset bulup içerisindeki datatable ı rapora ekliyoruz.

Database field kısmında artık Staff datatable ımızın sütunları gözükmektedir. Bu sütunları tablomuzun Details bölümüne koyduğumuzda sırasıyla tüm kayıtlar ekrana gelecektir. Crystal Report içerisindeki Details bölümü bir datatable ın datarowları üzerinde dönen foreach komutu gibi datatable üzerinde satırlar üzerinde dönüp satır verilerini ekrana bastıracak kısımdır.

Kod kısmında ise raporu çağıırıp ekrana hangi formatta basacağını belirtiriz.ExportFormatType enumu ve aldığı değerler aşağıda gösterilmiştir.

public enum ExportFormatType   
{   


NoFormat = 0,   
CrystalReport = 1,   
RichText = 2,   
WordForWindows = 3,   
Excel = 4,   
PortableDocFormat = 5,   
HTML32 = 6,   
HTML40 = 7,   
.ExcelRecord = 8,

}

Raporu ekrana getirmek için ReportDocument nesnesi tanımlayıp oluşturduğumuz rapor dosyasını yüklemeliyiz. Daha sonra datasetimizin ilgili tablosunu rapora datasource olarak vermeliyiz ve raporu hangi formatta ekrana getirmek istiyorsak ExportFormatType'ı istediğimiz formatta  seçerek ekrana bastırmalıyız.

using System;     
using System.Data;     
using System.Configuration;     
using System.Web;  
using System.Web.Security;    
using System.Web.UI;    
using System.Web.UI.WebControls;  
using System.Web.UI.WebControls.WebParts;  
using System.Web.UI.HtmlControls;  
using System.Data.Sql;  
using System.Data.SqlClient;  
using CrystalDecisions.CrystalReports.Engine;  
using CrystalDecisions.Shared;  
public partial class _Default : System.Web.UI.Page  
{  
protected void Page_Load(object sender, EventArgs e)  
{  
DataSet ds = new DataSet();  
System.Data.SqlClient.
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConString"].ToString());  
System.Data.SqlClient.
SqlDataAdapter ad = new SqlDataAdapter("select * from Staff", con);  
DataSet1 dsCrystal = new DataSet1();  
ad.Fill(dsCrystal);  
ReportDocument rp = new ReportDocument();  
rp.Load(Server.MapPath(
"CrystalReport.rpt"));  
rp.Database.Tables[0].SetDataSource(dsCrystal.Tables[
"Table"]);  
rp.ExportToHttpResponse(
ExportFormatType., Response, false, "");  
}  
}

Makalede ve kodlarda olan hatalar için ve takıldığınız noktalar için mehmetaliecer@gmail.com adresine mail atabilirsiniz.

İyi çalışmalar

Mehmet Ali ECER

www.mehmetaliecer.com