Crystal Report ile veritabanımızı raporlamak

Veritabanımızın raporunu almak oldukça önemlidir.Şimdi Visual Studio üzerinden Crystal Report ‘u kullanarak veritabanımızın raporunu alacağız .Neler yapacağız ? Dataset oluşturacağız.Onun içerisine de tablolar oluşturacağız.CrystalReport şablonu üreteceğiz.Ve bu şablona LinqtoSql komutlarıyla yazdığımız sorgunun çıktısını raporlanmasını isteyeceğiz.O yüzden adım adım gitmekte fayda var ,o yüzden adımları sırasıyla gerçekleştirelim.İlk olarak Form Application projesi oluşturalım ve formumuzun üzerine bir ComboBox ve bir tane de buton yerleştirelim.Daha sonra alt kısma da CrystalReportViewer’ı ekleyelim.

Şimdi Project->Add New Item diyerek bir DataSet seçiyoruz isminide MyData yapıyoruz.Karşımıza gelen sayfa .xsd uzantılıdır.Bu sayfa üzerinde sağa tıklayıp Add->DataTable menüsüne tıklıyoruz.Karşımıza DataTable1 adında bir tablo gelecektir.Ben bu örneğimde Northwnd veritabanından faydalandım.Bu örneğimde raporlanmasını istediğim sütunlar ProductName,UnitPrice,CategoryName olacaktır.O yüzden DataTable1 üzerinde sağa tıklayıp Add->New Column diyerek 3 tane sütunu elle giriyoruz.

DataTable1 tablomuza elle 3 tane sütunu teker teker girdikten sonra gelelim diğer adıma.Şimdi Project->Add New Item diyerek Reporting sekmesinden Crystal Reportu ekliyoruz.Bizim projemize CrystalReport1.rpt adlı bir dosya ekleyecektir.Tamama bastıktan sonra karşımıza wizard penceresi çıkacaktır.Gelen ilk pencerede Standart tabloyu seçiyoruz ve Tamama tıklıyoruz.

Daha sonra karşımıza Standart Rapor Oluşturma Sihirbazı gelecektir.ProjeVerileri ->ADO.NET Veri Kümeleri üzerinden oluşturduğumuz MyData isimli DataSet üzerindeki DataTable1 tablomuzu Seçili Tablolar kısmına atıyoruz ve ileri tıklıyoruz.Raporda görünmesini istediğimiz alanları Görüntülecek Alanlar bölümüne atıyoruz ve ileri tıklıyoruz.

Daha sonra karşımıza gelen pencereden gruplama ile ilgili kriteri belirliyoruz.Kategori isimlerine göre gruplanması için CategoryName sütununu sağ kısma atıyoruz.

Özetler ve Kayıt Seçimi wizardlarında İleriye tıklayıp Rapor Stili wizardında şablonumuzu seçtikten sonra Son’a tıklayıp raporlama şablonumuzu oluşturalım.

CrystalReportumuzu oluşturduk.Şimdi LinqToSql kullanacağımız için Project->Add New Item diyerek LinqToSql Classes ‘ı seçelim.Karşımıza gelecek olan .dmbl uzantılı sayfaya Products ve Categories tablolarını Server Explorer’dan sürükleyelim.Ve sayfamızın Properties ayarlarından Name property değerine de Norhwnd ismini verelim.

Gelelim kod yazmaya artık Öncelikle FormLoad kısmına GetCategories methodunu çağıracak şekilde fonksiyonumuzu yazalım.

private void Form1_Load(object sender, EventArgs e)
        {
            GetCategories();
        }
        private void GetCategories()
        {
            Norhwnd northwnd = new Norhwnd();
            var items = from category in northwnd.Categories select (new { kategori = category.CategoryName });
            comboBox1.Items.Clear();
            comboBox1.Items.Add(“Hepsi”);
            comboBox1.SelectedIndex = 0;
            foreach (var item in items)
                comboBox1.Items.Add(item.kategori);
        }

Yukarıdaki kodlarda GetCategories methodu ComboBox içerisine önce Hepsi seçeneğini,daha sonra Categories tablosundaki kategori isimlerini atacaktır.(Linq ile ilgili önceki makalelerimde sorguların nasıl yapıldığını anlatmıştım.)Karşımıza ilk olarak çıkacak kategori isminin de Hepsi olmasını istediğimizden selectedindex property değerini 0 yaptım.

Buton Click olayında ise ComboBoxdaki değere göre raporlanmasını isteyeceğiz.Eğer SelectedIndex 0 ise ,yani Hepsi kategorisi seçilmiş ise,categoryname şartı aranmayacak,eğer index 0 ‘dan farklı ise where sorgu işleci ile şart aranacaktır.

 private void button1_Click(object sender, EventArgs e)
        {
            Norhwnd northwnd = new Norhwnd();
            if (comboBox1.SelectedIndex == 0)
            {
                var items = from product in northwnd.Products
                            join category in northwnd.Categories
                            on product.CategoryID equals category.CategoryID
                            select (new { product.ProductName, product.UnitPrice,     category.CategoryName });

                MyData data = new MyData();
                foreach (var item in items)
                    data.DataTable1.Rows.Add(item.ProductName, item.UnitPrice, item.CategoryName);
                CrystalReport1 report = new CrystalReport1();
                report.SetDataSource(data);
                crystalReportViewer1.ReportSource = report;
                            }
            else
            {
                var items = from product in northwnd.Products
                            join category in northwnd.Categories
                            on product.CategoryID equals category.CategoryID
                            where category.CategoryName==comboBox1.SelectedItem
                            select (new { product.ProductName, product.UnitPrice, category.CategoryName });

                MyData data = new MyData();
                foreach (var item in items)
                    data.DataTable1.Rows.Add(item.ProductName, item.UnitPrice, item.CategoryName);
                CrystalReport1 report = new CrystalReport1();
                report.SetDataSource(data);
                crystalReportViewer1.ReportSource = report;

            }

Öncelikle index 0 ise sorgumuzu yapıyoruz.Join işleci ile iki tablo arasındaki ilişkili değerler kontrol edilip  ProductName,UnitPrice,CategoryName sütunları seçiliyor.Oluşturduğumuz MyData Dataseti için bir instance tanımlıyoruz.Bu instancin DataTable1 tablosunun her satırına sorgu ile elde ettiğimiz değerleri birer birer ekliyoruz.Eklerken sütun sırasına dikkat edelim!:En son CrystalReport1 instancı oluşturuğ bu instancın SetDataSource özelliğine parametre olarak MyData instanceni koyuyoruz.Daha sonra reportviewera neyi raporlayacağımızı söylüyoruz.

Eğer index 0 değil ise sorguda gördüğünüz üzere where işlecinde CategoryName sütununun ComboBox1’in SelectedItem ‘i ile karşılaştırılıyor.Diğer yazdıklarımız yukardakilerle aynı.Uygulamamızı çalıştırıp Kategori için Hepsi seçili iken raporlama yaptığımızda şu çıktıyı alırız.

Şimdi Kategori İsmini “Condiments” olarak ComboBox’dan seçtiğimizde sadece bu kategorinin raporunu elde ederiz.

cmengcompany.wordpress.com

Yazı gezinmesi

Mobil sürümden çık