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
Etiketler Asp.net ile seçilen kategoriye göre listeleme, Kategorilere ayirma islemi, Seçtigimizi kategoriye göre islem yapma