Datalist Içindeki Bilgileri Gruplayarak Göstermek.

Bu makalemizde datalist içine veritabanimizdan veri doldurmayi ve bu verileri gruplandirarak ekranda göstermeyi anlatacagim.

Datalisti veritabanindan aldigimiz bilgilerle istedigimiz yapida doldurabiliriz. Ama bilgilerimiz farkli gruplara aitse ve bizde bu gruplara göre göstermek istiyorsak kullanabilecegimiz birkaç farkli yöntem var. Bir örnekle anlatirsak, elimizde bir ürüne ait özellikler var. Mesela cep telefonu için boyutu, rengi, hafizasi, pil türü, konusma süresi, zoom  vs. vs. bu özelliklerin bir kismi genel özellikler, bir kismi güç özellikleri, kamera özellikler seklinde ayirabiliriz. Bu verileri datalistimizde gösterirken, özellikleri gruplarina göre ayirarak göstermek istiyoruz.  Örnegimizde kullanacagimiz veritabani yapidi ve içindeki bilgiler asagidaki gibi olsun.

 .

Id

OzellikAdi

Deger

Grubu

1

Renk

Siyah

Genel Özellikleri

2

Ekran Tipi

TFT

Ekran Özellikleri

3

Ekran Çözünürlügü

240 x 320 Piksel

Ekran Özellikleri

4

Renk Çözünürlügü

256K Renk

Ekran Özellikleri

5

Boyutlar

95 x 47 x 14.3 mm

Genel Özellikleri

6

Telefon Tipi

Kayan Kapakli

Genel Özellikleri

7

Entegre Kamera

Var

Kamera Özellikleri

8

Kamera Zoom

4x

Kamera Özellikleri

9

Entegre Flas

Var

Kamera Özellikleri

 

Visual Studio .Net i açip add new Project diyerek yeni bir proje açalim sonra  bir datalist ekleyelim. Projemize ekledigimi datalisti asagidaki gibi düzenleyelim.

<asp:DataList ID="MyDataList" runat="server">

    <HeaderTemplate>

        <table>

    </HeaderTemplate>

    <ItemTemplate>

        <tr>

            <td colspan="2" style="background-color: InactiveCaptionText">

                <asp:Label ID="Label1" runat="server" Text=’<%#Bind("Grubu") %>‘></asp:Label>

            </td>

        </tr>

        <tr>

            <td>

                <asp:Label ID="Label2" runat="server" Text=’<%#Bind("OzellikAdi") %>‘></asp:Label>

            </td>

            <td>

                <asp:Label ID="Label3" runat="server" Text=’<%#Bind("Deger") %>‘></asp:Label>

            </td>

        </tr>

    </ItemTemplate>

    <FooterTemplate>

        </table>

    </FooterTemplate>

</asp:DataList>

 

Sayfamizin kod kismana asagidaki fonksitonu ekleyerek Page_Load kosminda çagiralim.

 

public void VerileriDoldur1()

{

    // veritabani baglantimiz

    SqlConnection connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=deneme;Integrated Security=True");

    connection.Open();

 

    //verilrimizi tablodan çekelim

    SqlDataAdapter da = new SqlDataAdapter("SELECT OzellikAdi,Deger,Grubu FROM Ozellikler order by Grubu ", connection);

    da.SelectCommand.ExecuteNonQuery();

 

    //datatable a atalim

    DataTable dTable = new DataTable();

    da.Fill(dTable);

    MyDataList.DataSource = dTable.DefaultView;

    MyDataList.DataBind();

}

 

Saydamizi yukaridaki gibi düzenleyip çalistirdigimizda ekran görüntümüz asagidaki gibi olur.

.

 

 

Yukarida dikkat edecek oursaniz her özellikten önce grup bilgisi yer aliyor. Biz Her grup altinda o gruba ait özellikleri göstermek istersek. Bunun için ilk yöntemimiz, datalistin içi dolarken ayni olan gruplari silmek. Bunun için item data bound içine asagidaki kodu yaziyoruz.

 

protected void MyDataList_ItemDataBound(object sender, DataListItemEventArgs e)

{

    if (e.Item.ItemType == ListItemType.AlternatingItem | e.Item.ItemType == ListItemType.Item)

    {

 

        string GrupAdi = ((Label)(e.Item.FindControl("Grup"))).Text;

        string MevcutGrup = "";

        try

        {

            MevcutGrup = ViewState["Grup"].ToString();

        }

        catch (Exception)

        {

 

        }

 

        if (MevcutGrup == GrupAdi)

        {

 

            ((Label)(e.Item.FindControl("Grup"))).Text = "";

 

            e.Item.Visible = false;

 

        }

 

        else

        {

 

            MevcutGrup = GrupAdi;

 

            ViewState["Grup"] = MevcutGrup;

 

            ((Label)(e.Item.FindControl("Grup"))).Text = GrupAdi;

 

            e.Item.Visible = true;

 

        }

 

    }

}

 

Yukaridaki kodu yazdiktan sonra  ekran görüntümüz asagidaki gibi oluyor.

 

 

 

 

Ayni islemi bir de iki datalist iç içe koyarak da yapabiliriz.ilk datalistimiz sadece grup adlarini, bunun içindeki datalistimizde o gruba ait özellikleri gösterecek. Ilk olarak Veritabanindan sadece grup adlarini çekip ilk dataliste atiyoruz. Ve datalistin item data bounduna o gruba ait özellikleri çekip atiyoruz

 .

 

public void VerileriDoldur2()

{

    // veritabani baglantimiz

    SqlConnection connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=deneme;Integrated Security=True");

    connection.Open();

 

    //gruplari tablodan çekelim

    SqlDataAdapter da = new SqlDataAdapter("SELECT  distinct Grubu FROM Ozellikler ", connection);

    da.SelectCommand.ExecuteNonQuery();

 

    //dataliste a atalim

    DataTable dTable = new DataTable();

    da.Fill(dTable);

    GrupDataList.DataSource = dTable.DefaultView;

    GrupDataList.DataBind();

}

protected void GrupDataList_ItemDataBound(object sender, DataListItemEventArgs e)

{

    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)

    {

        string GrupAdi = ((Label)(e.Item.FindControl("Grup"))).Text;

        // veritabani baglantimiz

        SqlConnection connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=deneme;Integrated Security=True");

        connection.Open();

 

        //gruba ait özellik ve degerleri tablodan çekelim

        SqlDataAdapter da = new SqlDataAdapter("SELECT OzellikAdi,Deger  FROM Ozellikler where Grubu=’" + GrupAdi + "’ ", connection);

        da.SelectCommand.ExecuteNonQuery();

 

        //2.dataliste atalim

        DataTable dTable = new DataTable();

        da.Fill(dTable);

        DataList mylist = ((DataList)(e.Item.FindControl("OzellikDataList")));

        mylist.DataSource = dTable.DefaultView;

        mylist.DataBind();

    }

}

 

Ekran görüntümüz:

15 thoughts on “Datalist Içindeki Bilgileri Gruplayarak Göstermek.

  1. kisaca demek istedigim sey Bu en son yazdiginiz .cs kodu için yazilacak html-asp kodu nasil olmali,kodu yazarsaniz çok makbule geçer,ihtycm var tskler

  2. DEVAMI
     …. labellarda bi degisiklik yapmadim.

    DataBinding: ‘System.Data.DataRowView’, OzellikAdi adinda bir özellik içermiyor.  

    hatasini aliyorum.gördügünüz gibi 
    <asp:Label ID="label2" runat="server" Text='<%#Bind ("OzellikAdi")%> ‘></asp:Label> satiri oldugu halde bu hatayi veriyor.Umarim ne demek istedigimi anlamissinizdir..yardim lütfen  

  3. Cevap için tesk ederim ama sanirim beni anlamadiniz.en yukardaki kodlari ayni sekilde yazdim..

    <tr>
    <td colspan="2" style="background-color:InactiveCaptionText">
    <asp:Label ID="label1" runat="server" Text='<%#Bind ("Grubu")%> ‘></asp:Label>
    </td>
    </tr>
    <tr>
    <td>
    <asp:Label ID="label2" runat="server" Text='<%#Bind ("OzellikAdi")%> ‘></asp:Label>
    </td>

    <td>
    <asp:Label ID="label3" runat="server" Text='<%#Bind ("Deger")%> ‘></asp:Label>
    </td>
    </tr>

    Kod bu sekildeyken; en yukarda ilk kodun çiktisini yazmissiniz ,bn de ayni çiktiyi aldim.Fakat içiçe Datalist kullanimnda yine yukarda yazdigim gibi labellarda

  4. merhaba pcmuh

    aldigin hata datalist’in içinde OzellikAdi Itemini bulamamis, datalistine:

    <asp:Label ID="Label2" runat="server" Text=’

  5. merhabalar,

    bn en alttaki iç içe datalist olayini denemeye çalistim,aspx source kisminda

    DataBinding: ‘System.Data.DataRowView’, OzellikAdi adinda bir özellik içermiyor.

    gibi bir hata veriyor bnde.yardimci olabilecek varmi acaba??

  6. verilen tabloyu bir view sonucu elde edilen gerekli bilgiler olarak düsünebilirsin. aslinda 3 farkli tablo var burada: 1- grup  2- gruba bagli özellik adlari 3- her ürün için farkli olacak özellik degerleri. ama bu makale de amaç sorgu yapilari yada tablo sekilleri degil datalist içindeki verileri gruplamayi anlatmak oldugu için bu sekilde anlattim.

  7. select in içini dolduran insert kismi ne demek maliki.

    burda adamlar bir örnek üzerinden biseyler anlatmaya çalismis. örnegin mantikli olmasi veya olmamasinin ne önemi var. ha daha iyi örnek üzerinden anlatmaui düsünüyorsan yaz bir makale yayinlasinlar

  8. beni anlamadigim bir sey var.

     

    grubu adli kolon bir kategori gibi düsünülmüs burada yanilmiyorsam.

    eger öyle ise, acaba hangi db de, bu denli bir kategorize etme sekli vardir ki ?

    bu anlatilan select in içini dolduran insert kismini çok merak ediyorum. acaba manuel mi yaziliyor grubu ???

     

  9. Merhaba Çagdas
    Site için vakit buldukca çalismalara devam ediyor. Yakin zamanda uye olma islemleri açacagiom ayrica uyelerin makale eklemesinide saglayacagim. Simdilik makale yazmak isteyen arakdaslar bilgi@yazilimmutfagi.com adresine mail atarlarsa sevinirim.
    Zaten birlikte çalisilmazsa paylasimi büyütmek çok zor. Katilimlariniz beni sevindirir.

  10. ewet ite güzel bende yeni kayit oldum ama begendim siteyi ama daha çok sey herkez tarafindan paylasilmali bu siteyi tam bir yazilimmutfagi yapalim hepbirlikte arkadaslar iyi gunler.

Guests için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir