ASP Net Dinamik Site Mantığı

Bu yazının sonunda asp.net uygulamalarında dinamiklik mantığını kavramış ve uygulamalarınızı buna göre şekillendirebileceksiniz. En azından benim düşüncem bu yönde. Yapacağımız uygulamanın özetini vericek olursam Ürünleri sergileyeceğimiz bir web sayfası düşünelim ketegorileri olucak ve biz seçeceğimiz kategoriye göre verileri göstericek. Tabii verileri gösterirken detay sayfası da yapıcaz. Haydi o zaman başlayalım; Öncelikle Sql Express’i açıp yeni bir Database oluşturuyoruz. Ben kendi veritabanım için Deneme adını verdim, siz de kendinize göre bir veritabanı adı beliryebilirsiniz.

ASP Net

Daha sonra bu  veri tabanına tablo ekliyoruz.

ASP Net

Tablolarımın adı şu şekilde “Kategori ve Urunler” çünkü ürünlerin bir kategorisi olmak zorunda.  Gelelim kolonların adlarına ve veri tiplerinin seçimine, kategori tablosuna

ASP net

Kategori_id (int) ve kategori_adi (varchar(50)) olucak şekilde iki kolon oluşturdum.  Bunları kısaca özetleyelim, kategori_id her tabloda olan ve primary key olarak seçilen alan. Bu alanı nerede kullanıcaz, menüden kategorisini seçeceğimiz veriler bize işte bu Kategori tablosundan kategori_id’lerine göre gelicek.Kategori_adi kolonu ise kategorilerimizin isimlerini tutacak.

Urunler tablosunda;

ASP net

Urun_id(int) yine kategorideki gibi primary key olarak seçtim ve data type olarak int seçtim.  Fiyat Urunler’deki  Urun_adi ürünlerimizin adını tutucak ve Urun tablosuna kategori_id yi’de koydum çünkü ben sql sorgumda ürünleri çekerken kategori_idlerine göre çekicem, şimdi bu iki tablodaki kategori_id’leri ilişkendirelim. 

Unutmadan söyleyeyim kategori_id ve urun_id primay key’ler int data tipinde ve auto inc. Özellikleri açık olmalı şöyleki biz her urun eklediğimizde id numarası(otomatik olarak) bir artmalı.

ASP net

Is Identity özelliğini yes olarak değiştiriyoruz.

ASP net

Database diagram’dan new database diagram diyip yeni bir diagram oluşturalım;

ASP net

Karşımıza çıkan tabloları Add ile ekleyelim.  Ekrana tüm tablolarımız ve hücrelerimiz çıkmış olmalı, Kategori tablosundaki kategori id’yi tutup Urun tablosundaki kategori_id ‘nin üzerine bırakalım.

ASP net

Şöyle bir ilişkilendirme sayfası çıkmalı, burada iki hücre değerlerinin aynı olmasını sağlıyoruz. Ok’a tıklayıp diagrama geri dönelim.

ASP net

Şöyle ilişkilendirilmiş bir diagramımız olmalı. Bu ilişkiye 1’e sonsuz ilişki deniyor.  Diagramı kayıt edip tablolarımızı veri ile dolduruyoruz.

ASP net

Kategori_id leri değiştiremiyoruz kategori_adi kısımlarını ben elimle girdim. Şimdilik kategori_id ‘leri aklımızda tutalım veri girerken lazım olucak.

ASP net

Elimle girdim x3-02 telefon kategorisinde fiyatı 430  İpad2 tablet pc kategorisinde fiyatı 1200  Acer ise laptop kategorisinde fiyatı 1500

Şimdi Visiual Studio ‘yu açıp yeni bir Empty Web site projesi açıp Add New Item’dan, yeni bir web form ekleyelim.Adını ben Default.aspx koydum.  Default aspx’in Design kısımında bir adet menü ve data list atalım. Menu’nun properties kısımından ayaları şöyle yapalım;

ASP net

Add items’ten 3 tane tab ekleyelim Textleri kategori adlarıyla aynı olsun. Burada önemli olan her menü item’inin(elemanının) value değerleri. Bu değerler kategori_id leri ile aynı olmak sorunda çünkü ben sql sorgumu bunlar ile yapıcam.

ASP net

Şöyle bir görüntümüz olmalı. 

Şimdi bir adet Data List ekleyelim , verileri göstermek için.  DataList’in Edit Templates kısımına gelelim ve bu kısıma çekmek istediğimiz verileri yazalım.

ASP net

Ben urun id yi ürün adını ve fiyatı çekmişim.  UrunID’nin karşısına label ekleyelim. Bu eklediğimiz label datalist içinde olduğundan code Behin da göremeyiz, üzerine tıklayıp  Edit Data Bindings ‘i seçelim.

ASP net

Text özelliğine Eval(“urun_id”) yazıyoruz. (Büyük küçük harf önemli) eval fonksiyonu tek taraflı olarak veri çekme işini yapar. Tek taraftan kasıt veri okumaktır. Aynı şekilde fiyat için de bir label ekleyelim ve Edit data bindings’ten text özelliğine Eval(“fiyat”) yazalım. 

Urun adına gelince şimdi burada Query String kullanmamız gerekli . Neden? Çünkü biz ürünlerimiz için ayrı bir detay sayfası yapıcaz bunun için ürünlerin id’lerini bir yerde tutmamız gerekli.  Ayrıca bu işlemi link olmadan yapamayız ve urunadı kısımının yanına hyperlink atalım, ve edit data bindings i açıp text özelliğine Eval(“Urun_adi”) yazalım.

ASP net

Hyper link’in extradan NavigateUrl özelliği var. Bu özellik yol gösterici url’yi yani linke tıklanıldığında nereye gidilceği özelliğidir.

ASP net

Bu kısıma ise Eval(“Urun_id”,”UrunDetay.aspx?Urun_id={0}”) yazıyoruz.  Şimdi bu kısımı inceleyelim.Bizim UrunDetay.aspx sayfamız yok onu sonra oluşturucaz. Eval(“urun_id”) öncelikle veri tabanından urun_id bilgisini alıyor ve sonra QueryString oluşturuyoruz Urun_id adında bunu ?’den sonra belirtiyoruz. ={0} olan kısım ise eval ile çekilen id yi alıp 0 yerine koyuyor örneğin 3 ise Urunid=3 olup id si 3 olan ürünün detay sayfasını açacak.

ASP net

En son buna benzer bir sayfamız olmalı.  Gelelim Csharp kodlarımızı yazmaya. Default aspx sayfamızın Default.aspx.cs ‘i açıp şu kodları yazalım. Öncelikle kütüphanemize

using System.Data;

using System.Data.SqlClient;

 

eklememiz gerekli, bunlarsız Sql ile bağlantı kuramayız.
 

protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)

        {

 

                SqlConnection con = new SqlConnection("Data Source=KAANS\\SQLEXPRESS;Initial Catalog=Deneme;Integrated Security=True");

                con.Open();

                SqlCommand cmd  =new SqlCommand("SELECT * FROM Urunler where Kategori_id = " + Menu1.SelectedValue,con);

                SqlDataReader reader = cmd.ExecuteReader();

                DataList1.DataSource = reader;

                DataList1.DataBind();

                reader.Close();

                con.Close();

           

        }

Kodları menuItemClick olayının içine yazıyoruz. Con connetcion nesnemiz bizim Sql server üzerindeki Deneme database’ine bağlantımızı gösteriyor.  Cmd ise bu bağlantı üzerindeki sql sorgumuz, where ile  kategori id’si menu1’deki seçilen elemanın değeri(value) ne göre ürünleri getiriyor.Sorgu sonucundaki verileri datareader’e atıyoruz datalist’ i bağlayıp sonucları gösteriyoruz.

F5 ile çalıştırıyoruz,

ASP net

Telefonu seçtim ve telefon ile ilgili çektiğim veriler ekrana geldi. Şimdi ise UrunDetay sayfamızı yapalım. Add New Item’den web form ekleyip adını UrunDetay koyalım. Design’dan içine bir adet DetailView koyalım. Cs kısımına gelelim ve şu kodları Page_Load olayına yazalım.

SqlConnection con = new SqlConnection("Data Source=KAANS\\SQLEXPRESS;Initial Catalog=E-Ticaret;Integrated Security=True");

            con.Open();

            SqlCommand cmd = new SqlCommand("SELECT * FROM Urunler where Urun_id ='"+ Request.QueryString["Urun_id"]+"'" , con);

            SqlDataReader reader = cmd.ExecuteReader();

            DetailsView1.DataSource = reader;

            DetailsView1.DataBind();

            reader.Close();

            con.Close();

yine Sql bağlantısı için;

using System.Data;
using System.Data.SqlClient;

eklemeyi unutmayalım.    

Buradaki tek fark sorguda, ürünler tablosundan urun_id leri daha önceden oluşturduğumuz QueryString’ten alıyoruz.  Yine sorgu sonucundaki verileri reader’e attık ve detailsview’e bağlayıp verileri ekranda göstermiş olduk. F5 ile test edelim.

ASP net

DetailsView  bize sqlden gelen verilerin detaylarını kendi otomatik gösteriyor. Biz DetailView kullanmadan da bu işi yapabiliriz, yine bir datalist kullanıp içine label atıp verileri Eval ile çekebiliriz. Bu yazıda hedef ettiğim dinamiklik mantığını umarım anlamışsınızdır, daha fazla dinamik olabilir miydi bu örnek tartışılır. Sadece eksik olan şey verileri biz elimizle girdik onları da Update ve insert komutlarıyla da yapabilirdik, ama ben bu konuda QueryString’i anlatmaya ve dinamik olarak kullanmaya çalıştım. Umarım sizlere faydalı olmuştur. Bol kodlu günler dilerim.

8 Comments

Add a Comment

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir