Aşağıda tablodaki datalardan birkaçını görnektesiniz.

Tabloyu kısaca inceledikten sonra şimdi katoloğu hazırlamaya geldi.
Sayfamıza 4 Datalist ekliyoruz bunlardan 1. si Markaların listeleneceği dtListMark ,diğeri seçilem modele listelenen dtListModel,bir diğeri seçilen modele göre listlenen dtListCategory ve son olarakta seçilen kategoriye göre listelenen dtListProducts. Tüm bu kontrolleri de bir UpdatePanel içine alıyoruzki her sorgulama işleminde sayfa postback olmasın.

<asp:LinkButton ID=”lnkmarka” runat=”server” CommandName=”lnkmarka” CssClass=”lnkDataListMark”
</asp:DataList>
Şimdi sayfa ilk yüklendiğinde markalar dtListMark datalistine listelenmelidir. Burada DataAccessLayer kullanılıldığı için Database diye bir sınıf da nereden çıktı diyebilirsiniz.
Mehmet Aydın Ünlü kardeşimin blog sitesini ziyaret ederek ve bu makaleyi okuyarak öğrenebilirsiniz son derece güzel ve faydalı bir makale.
protected void Page_Load(object sender, EventArgs e)
{
fillmark();
{
protected void fillmark()
}
Daha sonra kullanıcı Markalardan birine tıkladığı zaman ilgili markaya bağlı modellleri dtListModel içinde listelememiz lazım.
dtListMark’ın ItemCommand özelliğinde aşağıda kod ile tıklanan markanın ne olduğunu buluyoruz.Daha önce dediğim gibi tüm bilgiler tek tabloda tutuldugu iççin burada markanın Text’ine ulastım eger ayrı bir tabloda tutulsaydı ID’sine erişecektim.
protected void dtListMark_ItemCommand(object source, DataListCommandEventArgs e)
{
LinkButton lb = (e.Item.FindControl(“lnkmarka”) as LinkButton);
lblmark.Text = lb.Text;
fillmodel(lblmark.Text);
panelmodel.Visible = true;
panelcategory.Visible = false;
}
Marka fillmodel() fonsiyonuna akarılıyor ve fillModel ‘de o markaya ait modelleri çekiyor.

protected void fillmodel(string mark)
{
string constr = ConfigurationManager.ConnectionStrings["strdega"].ToString();
DataBase db = new DataBase(constr);db.AddParameter(“@par_marka”, mark);
DataTable dt = db.RunSPTable(“spFillModel”);
dtListModel.DataSource = dt;
dtListModel.DataBind();
}
Modelleri çeken Stored Procedure
CREATE PROCEDURE [dbo].[spFillModel]
@par_marka nvarchar(50)
AS
BEGIN
SELECT DISTINCT [MODEL] FROM [tbl_Products] WHERE ([MARKA] = @par_marka)
END
ve şimdide dtListModel Datalistine tıklanınca bu modellere ait kategorileri listeleyelim.
protected void dtListModel_ItemCommand(object source, DataListCommandEventArgs e){
panelmodel.Visible = false;
LinkButton lb = (e.Item.FindControl(“lnkmodel”) as LinkButton);
lblmodel.Text = lb.Text;
fillcategory(lblmark.Text, lblmodel.Text);
panelcategory.Visible =true;
}
spFillCategory Stored Procedure ‘u ilede Tüm kategoriler listeleniyor.
CREATE PROCEDURE [dbo].[spFillCategory]
@par_marka nvarchar(50),@par_model nvarchar(50)
AS
BEGIN
SELECT DISTINCT [KATEGORI] FROM [tbl_Products] WHERE ([MARKA] = @par_marka) AND ([MODEL]=@par_model)
END
ve şimdide dtListModel Datalistine tıklanınca bu modellere ait kategorileri listeleyelim.

protected void dtListModel_ItemCommand(object source, DataListCommandEventArgs e)
{
panelmodel.Visible = false;
LinkButton lb = (e.Item.FindControl(“lnkmodel”) as LinkButton);
lblmodel.Text = lb.Text;
fillcategory(lblmark.Text, lblmodel.Text);
panelcategory.Visible =true;
}
Marka ve Model fillcategory() fonsiyonuna akarılıyor.
protected void fillcategory(string mark, string model)
{
string constr = ConfigurationManager.ConnectionStrings["strdega"].ToString();DataBase db = new DataBase(constr);db.AddParameter(
“@par_marka”, mark);db.AddParameter(“@par_model”, model);
DataTable dt = db.RunSPTable(“spFillCategory”);
dtListCategory.DataSource = dt;
dtListCategory.DataBind();
}
spFillCategory Stored Procedure ‘u ilede Tüm kategoriler listeleniyor.
CREATE PROCEDURE [dbo].[spFillCategory]
@par_marka nvarchar(50),@par_model nvarchar(50)
AS
BEGIN
SELECT DISTINCT [KATEGORI] FROM [tbl_Products] WHERE ([MARKA] = @par_marka) AND ([MODEL]=@par_model)
END
Ve son olarak dtListCategory’ ye tıklanınca Ürün ile biligileri dtListProducts Datalistinde listelemeye geldi.
protected void dtListCategory_ItemCommand(object source, DataListCommandEventArgs e)
{
panelcategory.Visible =true;
panelProducts.Visible = true;
LinkButton lb = (e.Item.FindControl(“lnkcategory”) as LinkButton);
lblcategory.Text = lb.Text;
fillproducts(lblmark.Text, lblmodel.Text, lblcategory.Text);
}
protected void fillproducts(string mark, string model, string category)
{
string constr = ConfigurationManager.ConnectionStrings["strdega"].ToString();
DataBase db = new DataBase(constr);db.AddParameter(“@par_marka”, mark);
db.AddParameter(“@par_model”, model);db.AddParameter(“@par_category”, category);DataTable dt = db.RunSPTable(“spFillProducts”);
dtListProducts.DataSource = dt;
dtListProducts.DataBind();
}
spFillProducts Stored Procedure ‘u ilede o marka ,model ve kategoriye ait ürünler listeleniyor.
CREATE PROCEDURE [dbo].[spFillProducts]
@par_marka nvarchar(50),@par_model nvarchar(50),@par_category nvarchar(50)
AS
BEGIN
SELECT * FROM [tbl_Products] WHERE (([MARKA] = @par_marka) AND ([MODEL] = @par_model) AND ([KATEGORI]= @par_category))
END
