yazgelistir.com
  Ana Sayfa   Forumlar   Blog  Hakkımızda
  
Loading... Yükleniyor. Lütfen bekleyin ...
 Kategoriler
ASP.NET
ADO.NET
Visual Basic .NET
Visual C# .NET
Visual Studio ve Araçlar
Windows Server System
Office System
.NET Framework
SQL Server
XML Web Servisleri
Yazılım Güvenliği
Yazılım Mühendisliği
Mobil Teknolojileri
Dynamics
Smart Client
Expression Studio
Silverlight
Kod Parçaları
Açık Kaynak Kodlu Uygulamalar
İş Zekası
Windows Mobile Embedded

    0
Çıkış Yap
Üyelik Bilgilerimi Güncelle
Seminerlerim
Favorilerim
Ajanım

 Yazgeliştir
Yazar olmak ister misiniz?
Forumlar
Kitap Önerileri
Haberler
Röportajlar
Yazarlar
İpuçları
Görüşleriniz
Hakkımızda

  İstatistikler
En son kayıt olan üye:
ftonak

Şuanki online üyeler ( 3 ) :
SoftwareExperts , myurt87 , ahmetkilic
 

DorukNet 
     ASP.NET Kategorisi  » ASP.NET 2.0 - DataList ve Repeater    

ASP.NET 2.0 - DataList ve Repeater

Print Versiyonu


 
Yazar: Coskun SUNALI

Tarih:04.07.2005

Puan:4,22 (Oy Kullanan:36)

Okuma Sayısı:2075

  Makaleyi İşaretle


Makale Özeti
ASP.NET 1.0 ve 1.1 ile birlikte kullanmaya alıştığımız "Repeater" kontrolü elimizde bulunan verileri ardı ardına listelemek gibi işlemlerde bizim için bir vazgeçilmezdi. Repeater kontrolü veri gösterimi konusunda gayet başarılı olsa da, verinin yönetimi konusunda çok fazla opsiyona sahip değildi. Elbetteki veri yönetimi teknik olarak mümkündü fakat yoğun bir çalışma gerektiriyordu ve bu sebeple üzerinde veri yönetimi yapılacak bir kontrol gerektiğinde, akla gelen ilk kontrol DataGrid kontrolü oluyordu.

Şimdi ise Repeater kontrolü ile bazı konularda amaç farklılıkları gösterse de, bize çok daha farklı seçenekler sunan yeni bir kontrole sahibiz: "DataList".


Makale

ASP.NET 2.0 - DataList ve Repeater


Makalenin kapsadığı konular:
  1. Repeater kontrolü
  2. DataList kontrolü
  3. DataList ve Repeater'ın özellikleri açısından farkları
  4. DataList kontrolünün kullanımı ile ilgili örnek

    Not: Bu makaledeki örnekler sırasında, ASP.NET 2.0 ile birlikte gelen yeni bir kontrol olan "AccessDataSource" kontrolü kullanılacaktır. Bu kontrol ile ilgili ayrıntılı bilgiyi, nasıl oluşturulduğu gibi konuları daha önce yazmış olduğum ASP.NET 2.0 - GridView ve AccessDataSource konulu makalede bulabilirsiniz.
    Bu makalede yeni bir AccessDataSource kontrolünün oluşturulması aşaması takip edilecek fakat detaylarına girilmeyecektir.



Repeater

Repeater nedir?
Repeater; veritabanı, XML dosyası ve benzeri şekilde içerisinde bilgi saklayabileceğimiz herhangi bir kaynağın içerisinde tutulan bilgilerin, belirlenen taslak dahilinde ardı ardına listelenmesi için kullanılabilecek bir kontroldür.

HTML tagları ile bir listeleme işlemi yapmak istediğinizde aşağıdaki gibi bir kod yazmanız gerekmektedir:

    <ul>
        <li> ... </li>
    </ul>

Repeater kontrolünü kullanarak bu listenin otomatik olarak oluşturulabilmesi için ise Repeater kontrolünüzün tanımı aşağıdaki örneğe benzer olmalıdır:

    <asp:Repeater ID="Repeater1" runat="server">
        <HeaderTemplate>
            <ul>
        </HeaderTemplate>
        <ItemTemplate>
            <li> <%# Eval("DataFieldIsmi") %> </li>
        </ItemTemplate>
        <FooterTemplate>
            </ul>
        </FooterTemplate>
    </asp:Repeater>

Ve uygun DataSource verildikten sonra, Repeater DataSource üzerindeki kayıt sayısına bağlı olarak aşağıdakine benzer bir kod oluşturur:

    <ul>
        <li> ... </li>
        <li> ... </li>
        <li> ... </li>
        ...
        ...
    </ul>

Repeater verilerin listelenmesi işlemleri için oldukça performanslı bir kontrol olmasına rağmen, verilerin yanyana sıralanması gibi opsiyonlara destek vermemektedir. ASP.NET 2.0 ile birlikte gelen yeni Repeater kontrolündeki en önemli gelişme ise, yine ASP.NET 2.0 ile birlikte gelen DataSource kontrolleri olarak genelleyebileceğimiz "AccessDataSource", "XmlDataSource", "SqlDataSource" gibi kontrollere destek vermesidir.


DataList

DataList nedir?
Repeater kontrolünün tanımı DataList kontrolü için de birebir olarak kullanılabilir. Farklar DataList ve Repeater'ın özellikleri açısından farkları bölümünde anlatılacak olup, sanırım uygulama geliştiriciler açısından en önemli farrkı DataList kontrolünün veriyi bir tablo (<table>) içerisinde gösteriyor olması ve "ItemTemplate", "AlternatingItemTemplate" gibi taslaklarının görsel olarak değiştirilebilmesi olarak belirtilebilir.

Peki Repeater kontrolünü anlattığımız bölümde açıklamış olduğum listeleme örneğini DataList kontrolü ile yapmamız mümkün mü? Cevap malesef ki hayır. İşte bu noktada Repeater kontrolü ve DataList kontrolünün yolları birbirinden ayrılıyor.

Şimdi Repeater kontrolünü anlattığımız bölümde Repeater kontrolü için belirlediğim "HeaderTemplate", "ItemTemplate" ve "FooterTemplate" taslaklarını aynen DataList kontrolü için de verdiğimi düşünelim:

    <asp:DataList ID="DataList1" runat="server">
        <HeaderTemplate>
            <ul>
        </HeaderTemplate>
        <ItemTemplate>
            <li> <%# Eval("DataFieldIsmi") %> </li>
        </ItemTemplate>
        <FooterTemplate>
            </ul>
        </FooterTemplate>
    </asp:DataList>

Ve aynı DataSource özelliğini DataList kontrolüne de atadığımı varsayalım. İşte karşımıza Repeater kontrolünden farklı olarak çıkacak sonuç:

    <table id="DataList1" cellspacing="0" border="0" style="border-collapse:collapse;">
        <tr>
            <td>
                <ul>
            </td>
        </tr>
        <tr>
            <td>
                <li> ... </li>
            </td>
        </tr>
        <tr>
            <td>
                <li> ... </li>
            </td>
        </tr>
        <tr>
            <td>
                <li> ... </li>
            </td>
        </tr>
        ...
        ...
        <tr>
            <td>
                </ul>
            </td>
        </tr>
    </table>

Görmüş olduğunuz gibi DataList kontrolü, oluşturmuş olduğumuz "HeaderTemplate", "ItemTemplate" ve "FooterTemplate" taslaklarını bir tablo içerisine aldı ve uygun yerlere koydu ve biz de oldukça anlamsız bir HTML çıktısına sahip olduk.

Bu nokta Repeater ve DataList kontrollerini birbirinden ayıran kesin çizgi olarak varsayılabilir.


DataList ve Repeater'ın Özellikleri Açısından Farkları

Genel olarak farklar şu şekilde sıralanabilir:

  • Repeater kontrolü ile DataList kontrolünün en önemli farkı DataList kontrolünün veriyi bir tablo (<table>) içerisine alarak göstermesidir. Repeater kontrolünde ise "HeaderTemplate" ve "FooterTemplate" özelliklerini kullanarak kendinize ait bir taslak yaratmanız gerekir. Bu sebeple DataList kullanamayıp, sadece Repeater kullanabileceğiniz bazı senaryolarla karşılaşabilirsiniz. Örneğin "<ol>", "<ul>" gibi tagları kullanarak bir liste oluşturmak istiyorsak, taşıyıcı taglar olan "<ol>", "<ul>" taglarını Repeater'ın "HeaderTemplate" taslağıma, taşıyıcı taglarımızın kapanış tagları olan "</ol>", "</ul>" taglarını da Repeater'ın "FooterTemplate" taslağına yazarak listeleme işlemini gayet kolay bir şekilde halledebiliriz. DataList kontrolünün ise ilk amacı bu değildir. DataList kontrolünün ilk amacı verileri tablo ve tablonun içindeki satır/sütun bilgileri içerisinde göstermektir. DataList kontrolü de bir "HeaderTemplate" taslağına sahiptir fakat bu taslağın tek görevi verilerin listelendiği tablonun en üstünde belirecek alandır.
     
  • Repeater kontrolünün aksine, DataList kontrolünün sahip olduğu "ItemTemplate", "AlternatingItemTemplate" gibi taslak özellikleri görsel olarak değiştirilebilmektedir.
     
  • Repeater kontrolünün aksine, DataList kontrolü verileri yatay olarak da sıralayabilmektedir. Gerekli durumlarda verilerin yatay ve dikey kombinasyonlar halinde sıralanması işlemi de gerçekleştirilebilir. Örneğin tek bir satırda 2 kayıt göster gibi bir opsiyon mevcuttur.
     
  • Repeater kontrolünün aksine, DataList kontrolü "EditItemTemplate" taslağına sahiptir. Bu opsiyon sayesinde, DataList kontrolü birden fazla veriyi gösterirken, tek bir satırın "Güncelle" modunda açılması sağlanabilir.
     
  • Repeater kontrolünün aksine, DataList kontrolü "GridLines", "CellPadding", "CellSpacing" gibi görsel özelliklere sahiptir ve bu özelliklerin tamamı özellikler penceresinden tanımlanabilir.

    İki kontrolün özellikler pencerelerini karşılaştırabilmeniz açısından her ikisinin de özellikler penceresinin ekran görüntüsüne bakabilirsiniz:





    Sizin de görmüş olduğunuz gibi, kendimizin yazmak zorunda olduğu birçok özellik artık görsel olarak değiştirilebiliyor.
     



DataList kontrolünün kullanımı ile ilgili örnek

Şimdi hazırlayacağım örnek Access veritabanında kullanılan ürünlerin listelenmesi, güncellemesi ve silinmesi ile ilgili bir senaryoya sahiptir. Bu senaryonun teknik kısmında Access veritabanı ile kullanıcı arabiriminin iletişimini AccessDataSource sağlayacaktır. Bu örnek sırasında DataList kontrolü ile yapılması uygun olmayacağı için yeni kayıt ekleme işlemi gerçekleştirilmeyecektir.

Not: Bu makaledeki örnekler sırasında, ASP.NET 2.0 ile birlikte gelen yeni bir kontrol olan "AccessDataSource" kontrolü kullanılacaktır. Bu kontrol ile ilgili ayrıntılı bilgiyi, nasıl oluşturulduğu gibi konuları daha önce yazmış olduğum ASP.NET 2.0 - GridView ve AccessDataSource konulu makalede bulabilirsiniz.
Bu makalede yeni bir AccessDataSource kontrolünün oluşturulması aşaması takip edilecek fakat detaylarına girilmeyecektir.



Öncelikle Access uygulamamızı açarak veritabanımızı, tablomuzu (Urunler) ve kolonlarını oluşturalım:



Tabloya yeni kayıtlar ekleyelim:



Veritabanını kaydedip, projemize ekleyelim:







Şimdi sayfamıza yeni bir DataList kontrolü ekleyelim:



Sayfamıza ilk baktığımızda karşımıza aşağıdaki görüntü gelecektir:



Şimdi "Smart Tag" ekranını kullanarak yeni bir AccessDataSource tanımlayalım:



DataSource tipi olarak Access Database'i seçtim ve DataSource'un ID değeri olarak "Urunler" değerini verdim:



Projemin içerine eklediğim veritabanı yolunu gösterdim:



Veritabanından almak istediğim alanları seçip, SQL cümlemin otomatik olarak yazılmasını sağladım:



"Advanced" butonuna tıkladıktan sonra "Update" SQL cümlemin oluşturulması için "Generate INSERT, UPDATE, and DELETE statements" seçeneğini işaretledim:



"Text Query" butonuna tıklayıp, SQL cümlemi test ettikten sonra, "Finish" butonuna tıklayarak işlemi tamamlıyorum:



Şimdi başka hiçbir işlem yapmadan sayfamıza tekrar bakalım:



Görmüş olduğunuz gibi DataList kontrolü taslağı bizim için çoktan hazırladı bile. Peki taslakları görsel olarak nasıl değiştireceğiz? Yine "Smart Tag" yardımımıza koşuyor:



Smart Tag penceresindeki "Edit Templates" butonuna tıklayalım:



Default olarak "ItemTemplate" taslağı seçili olarak geldi. Peki başka hangi taslakları değiştirebiliriz:



Evet, sizin de gördüğünüz gibi DataList kontrolünün sahip olduğu tüm taslakları görsel olarak değiştirebiliyoruz. Bu konuya daha sonra tekrar geleceğim. Şimdi sayfamızı tarayıcımız ile çağırıp deneyelim:



Şimdi taslaklara geri dönüp, taslaklar üzerinde değişiklikler yapalım. Ben "ItemTemplate" taslağının içerisine yeni bir tablo ekleyip, satırların daha düzgün görünmesini sağlayacağım:



Sayfa çalıştırıldığında, yukarıdaki gibi daha düzgün bir görüntü elde etmek amacı ile "ItemTemplate" taslağımı aşağıdaki gibi belirledim:

    <ItemTemplate>
        <table style="width: 100%;">
            <tr>
                <td colspan="2" style="background-color: Silver; font-weight: bold; text-align: center;">
                    <asp:Label ID="IsimLabel" runat="server" Text='<%# Eval("Isim") %>' />
                </td>
            </tr>
            <tr>
                <td style="width: 100px;">
                ID
                </td>
                <td>
                    <asp:Label ID="UrunIDLabel" runat="server" Text='<%# Eval("UrunID") %>' />
                </td>
            </tr>
            <tr>
                <td>
                    Stok Adedi
                </td>
                <td>
                    <asp:Label ID="StokAdediLabel" runat="server" Text='<%# Eval("StokAdedi") %>' />
                </td>
            </tr>
            <tr>
                <td>
                    Fiyat
                </td>
                <td>
                    <asp:Label ID="FiyatLabel" runat="server" Text='<%# Eval("Fiyat") %>' />
                </td>
            </tr>
        </table>
        <br />
    </ItemTemplate>

Şimdi "HeaderTemplate" taslağımızı güzelleştirelim ve sayfamızı tekrar görelim:



Başlığımızın bu şekilde görünmesi için "HeaderTemplate" taslağımı aşağıdaki gibi belirledim:

    <HeaderTemplate>
        <table style="width: 100%;">
            <tr>
                <td style="background-color: Blue; color: White; font-weight: bold; text-align: center;">
                    Ürünler
                </td>
            </tr>
        </table>
    </HeaderTemplate>

Peki makalenin en başında da vurguladığım yatay listeleme özelliğini nasıl yapacağız? DataList kontrolünün sahip olduğu "RepeatColumns" özelliğini kullanarak bu işlemi gerçekleştirebiliriz. Örneğin ben oluşturmuş olduğum DataList kontrolünün "RepeatColumns" özelliğini 3 yapacağım:

Not: Genişliğini 250px olarak verdiğim DataList kontrolü artık 3 ürünü tek bir satırda göstereceğinden, DataList kontrolümün genişliğini bu noktada 600px olarak değiştiriyorum.



Şimdi tekrar tarayıcı aracılığı ile sayfamızın görünüşüne bakalım:



Görmüş olduğunuz gibi tek bir satırda 3 adet ürün gösterildi ve diğer satıra da toplamda 5 adet ürün olduğu için sadece 2 tane ürün yerleştirildi.

Sıra geldi DataList üzerinde bilgi güncelleme ve silme işlemine. Bunun için öncelikle "ItemTemplate" taslağımıza "CommandName" özelliği "Edit" ve "Delete" olan birer buton ekleyeceğiz. Butonların isminin bizim için hiçbir önemi yok, çünkü ASP.NET 2.0 ile birlikte gelen GridView, DataList gibi kontrollerin içerisine koyulan herhangi bir butonun "CommandName" özelliği "Edit" ve ya "Delete" olarak verildiği taktirde, bu butona tıklandığında o satır atanan değere göre "Edit" ve ya "Delete" moduna geçiyor.

Butonlarımızı (ben buton olarak LinkButton kullanacağım, siz Button ya da ImageButton kontrollerini de bu işlem için kullanabilirsiniz) "ItemTemplate" taslağımızı aşağıdaki gibi değiştirerek (kırmızı olarak yazılmış kısımlar yeni eklenen kısımlardır) ekleyelim:

    <ItemTemplate>
        <table style="width: 100%;">
            <tr>
                <td colspan="2" style="background-color: Silver; font-weight: bold; text-align: center;">
                    <asp:Label ID="IsimLabel" runat="server" Text='<%# Eval("Isim") %>' />
                </td>
            </tr>
            <tr>
                <td style="width: 100px;">
                ID
                </td>
                <td>
                    <asp:Label ID="UrunIDLabel" runat="server" Text='<%# Eval("UrunID") %>' />
                </td>
            </tr>
            <tr>
                <td>
                    Stok Adedi
                </td>
                <td>
                    <asp:Label ID="StokAdediLabel" runat="server" Text='<%# Eval("StokAdedi") %>' />
                </td>
            </tr>
            <tr>
                <td>
                    Fiyat
                </td>
                <td>
                    <asp:Label ID="FiyatLabel" runat="server" Text='<%# Eval("Fiyat") %>' />
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <asp:LinkButton ID="EditButton" runat="server" Text="Güncelle" CommandName="Edit" />
                    <asp:LinkButton ID="DeleteButton" runat="server" Text="Sil" CommandName="Delete" />
                </td>
            </tr>
        </table>
        <br />
    </ItemTemplate>

DataList kontrolümüzün Visual Studio 2005 üzerindeki görüntüsü şu şekilde olacaktır:



Peki butonlarımıza tıkladığımızda ne olacak? Şimdilik hiçbirşey. Öncelikle DataList kontrolümüzün "EditCommand" ve "DeleteCommand" event'lerini yakalamamız lazım:



"EditCommand" ve "DeleteCommand" event'lerimi event'in yazıldığı kısma mouse ile çift tıklayarak her 2 event için de yaratıyorum:



Ve Visual Studio 2005 method'umu otomatik olarak oluşturup, beni methodlara götürüyor:



"DataList1_EditComm