Merhaba Arkadaslar,
Bugün sizlere seçilen kategoriye göre ürünleri listeme olayini anlatacagim. Bu makalemde kullandigim nesneler:
SqlConnection – SqlDataAdapter – SqlCommand – Eval – QueryString – Datalist
Bu nesneler yardimiyla bu programi yazacagim.
1.Adim Islemler adinda class olusturup bu class da veri tabani islemlerimizi yapacagiz
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data; //Sql islemlerini yapabilmemiz için
using System.Data.SqlClient;// bu iki kütüphaneyi ekliyoruz
public class Islemler
{
string sorgu; //sürekli kullanacagimiz nesneleri global alanda tanimliyoruz
SqlDataAdapter adp;
SqlCommand cmd;
public int k_id;
private SqlConnection Baglan()//sql server a baglanmak için Baglan() metodunu olusturuyoruz
{
SqlConnection conn = new SqlConnection("server=BINNAZ\\SQLEXPRESS;database=deneme;trusted_connection=true;");//baglanti adresimizi yaziyoruz
conn.Open();//baglantiyi açalim
return conn; // baglantiyi gönderelim
}
public DataTable Urunler()// tüm ürünleri göstermek için ürünler adindaki metodumuzu olusturduk
{
sorgu = "select * from Urunler";
adp = new SqlDataAdapter(sorgu, Baglan());
DataTable dt = new DataTable();
adp.Fill(dt); // DataTable türündeki dt nin içini sorgudan gelen degerle doldurdum
Baglan().Close(); // baglantiyi kapattik
return dt; // geriye dt yi gönderdik
}
public DataTable Kategoriler() // kategorileri listelemek için olusturmus oldugum metod
{
sorgu = "select * from Kategoriler";
adp = new SqlDataAdapter(sorgu, Baglan());
DataTable dt = new DataTable();
adp.Fill(dt); // DataTable türündeki dt nin içini sorgudan gelen degerle doldurdum
Baglan().Close(); // baglantiyi kapattik
return dt; // geriye dt yi gönderdik
}
public DataTable ListenecekUrunler(int k_id) // kategoriye göre ürünleri getirmek için olusturdugum metod int türünde k_id adinda bir parametre aliyor
{
sorgu = string.Format("select * from Urunler where KategoriID in(select KategoriID from Kategoriler where KategoriID={0})", k_id); // sorgumuza k_id yi veriyoruz ki seçtigimiz kategoriye göre verileri çeksin
adp = new SqlDataAdapter(sorgu, Baglan());
DataTable dtUrun = new DataTable();
adp.Fill(dtUrun); // gelen degerle DataTable türündeki dtUru'ün içini doldurduk
Baglan().Close(); // baglantiyi kapattik
return dtUrun; // geriye kategoriye göre seçtigimiz bilgileri gönderdik
}
public int UrunSayisi(int i) // ürünlerin adedini göstermek için metod olusturdum int türünde i parametresini verdim çünkü parametreden gelen degere göre ürün adedini belirleyecegim
{
if (i==0) // eger i'nin degeri 0 ise
{
sorgu = "select count(*) from Urunler"; // bu sorguyu çalistir }
else if(i==1) // eger 0 degil 1 ise
{
sorgu = string.Format("select count(*) from Urunler where KategoriID={0}", k_id);// bu sorguyu çalistir bu sorguda da kategori id yi (k_id) verelim ki seçtigimiz kategorinin adedini getirsin
}
cmd = new SqlCommand(sorgu, Baglan());
int adet=(int)cmd.ExecuteScalar(); // gelen deger tek oldugu için ExecuteScalar kullandim.ExecuteScalar object türünde deger dönderdigi için ben bunu (int) bu sekilde int türüne dönderip adet nesnesinin içine attim
Baglan().Close();// baglantiyi kapattik
return adet; // geriye gelen degeri gönderdim
}
}
2.Adim Sayfa yüklendiginde ve butona tiklandiginda çalisacak olan kodlarimizi yazalim
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data; // Sql islemlerini yapabilmemiz için
using System.Data.SqlClient; // bu iki kütüphaneyi ekliyoruz
public partial class _Default : System.Web.UI.Page
{
Islemler islem = new Islemler(); // Islemler classindan islem adinda nesne olusturuyoruz. Çünkü Islemler classinin içindeki parametlere ulasabilmek için nesne türetmemiz gerekiyor
protected void Page_Load(object sender, EventArgs e)
{
DataTable dtKategoriler = islem.Kategoriler(); // islem nesnesinden Kategoriler() metodunu çagirdim ve geriye DataTable türünden deger dönderdigi için dtKategorilerin içine attim
dtlstKategori.DataSource = dtKategoriler; // datalistimizin (dtlstKategori) içine ekledim
dtlstKategori.DataBind();// datalistin (dtlstKategori) içini doldurdum
DataTable dtUrunler = islem.Urunler(); // islem nesnesinden Urunler() metodunu çagirdim ve geriye DataTable türünden deger dönderdigi için dtUrunler içine attim
dtlstUrunler.DataSource = dtUrunler; // datalistimizin (dtlstUrunler) içine ekledim
dtlstUrunler.DataBind();// datalistin (dtlstUrunler) içini doldurdum
lblAdet.Text = islem.UrunSayisi(0).ToString(); // islem nesnesinden UrunSayisi() metodunu çagirdim ve 'i' parametresini aldigi için bende 0 degerini verdim.Çünkü UrunSayisi metoduna 0 degerini gönderirsem tüm ürünleri listeyecekti bende sayfa yüklendiginde (Page_Load) tüm ürünleri görmek için verdim.
}
protected void lnkKategori_Click(object sender, EventArgs e) // kategorilerden herhangi birine tiklandiginda
{
int k_id = Convert.ToInt32(Request.QueryString["k_id"]); // QueryString ile göndermis oldugum kategori id (k_id) yi int türündeki k_id degiskenine attim.QueryString geriye string deger gönderdigi için int türüne çevirdim yani Convert ettim.
islem.k_id = k_id; // sonra gelen degeri Islemler classina gönderdim
lblAdet.Text = islem.UrunSayisi(1).ToString(); // ürün sayisini kategoriye göre yapmasini istedigimiz için UrunSayisi metodu aldigi parametre degerini 1 yaptim bu sayede UrunSayisi metodunda i degerini 1 gönderdim ve if sorgusunda i==1 olan sorguyu çalistirip istedigimiz ürünün adedini listedik
DataTable dtlisteurun = islem.ListenecekUrunler(k_id); // sonra da ListenecekUrunler metoduna k_id yi verdim ve dtlisteurun içine attim
dtlstUrunler.DataSource = dtlisteurun; // datalistin içine gönderdim
dtlstUrunler.DataBind();// ve gönderdigim degerle de içini doldurdum
}
protected void lnkTumUrunler_Click(object sender, EventArgs e) // Tüm ürünlere tiklandiginda
{
Response.Redirect("Default.aspx"); // sayfayi tekrar yükleyip Page_Load olmasini sagladim bu sayede program Page_Load a gitti ve içindeki kodlari çalistirdi. Tüm ürünler görüntülenmis oldu
}
}
3.Adim Tasarim kisminda gelen degerleri yazdirmak için Eval kullanacagim
<body>
<form id="form1" runat="server">
<div id="menu">
<h2>Kategoriler</h2>
<asp:LinkButton ID="lnkTumUrunler" CssClass="kategori" runat="server" OnClick="lnkTumUrunler_Click">Tüm Ürünler</asp:LinkButton>
<asp:DataList ID="dtlstKategori" runat="server">
<ItemTemplate>
<asp:LinkButton ID="lnkKategori" CssClass="kategori" runat="server" PostBackUrl='<%# string.Format("~/Default.aspx?k_id={0}", Eval("KategoriID")) %>' OnClick="lnkKategori_Click"><%# Eval("KategoriAd") %><!-- Kategori adini Eval yardimi ile LinkButton'un text'ine yazdirdim --></asp:LinkButton><!-- LinkButton ile kategorileri olusturdum ve PostBackUrl degerine Kategoriid yi QueryString ve Eval kullanarak gönderdim -->
</ItemTemplate>
</asp:DataList>
</div>
<div id="urunler">
<h2>Ürünler</h2>
<label style="font-size:18px; font-weight:bold;">Ürün Sayisi : </label>
<asp:Label ID="lblAdet" runat="server" Text="" Font-Bold="true" Font-Size="Large"></asp:Label><br /><br />
<asp:DataList ID="dtlstUrunler" runat="server">
<ItemTemplate>
<label>Ürün Adi :</label>
<b><%# Eval("Urun") %></b> <!-- Eval kullanarak ürün adini yazdirdim -->
<br />
<label>Ürün Fiyati :</label><b><%# Eval("Fiyat") %> TL</b><br /> <!-- Eval kullanarak ürünün fiyatini yazdirdim -->
<br />
</ItemTemplate>
</asp:DataList>
</div>
</form>
</body>
Ve Son olarak ekran çiktilarina bakalim
Bu sayfa yüklendiginde olan görüntü:
Bu ‘Telefon’ kategorisine tikladigimda çikan sonuç:
Bu da ‘Bilgisayar’ kategorisine tikladigimda çikan görüntü:
Evet arkadaslar programimiz basariyla sonuçlanmistir. Eger akliniza takilan bir sey veya sormak istediginiz soru varsa yorum olarak atabilirsiniz. Elimden geldigi kadariyla yardimci olurum.
Iyi Çalismalar
Bilgi Paylastikça Çogalir
Yazılım Geliştirici & Yazılım Uzmanı