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 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 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.



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.
     




Ş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_EditCommand" methodumuzun içeriğine yazmamız gereken kod DataList kontrolümüzün "EditItemIndex" değerini vermeli ve DataList kontrolünü yeniden doldurmalıdır. Bu işlemi şu şekilde yapabilirsiniz:

    protected void DataList1_EditCommand( object source , DataListCommandEventArgs e )
    {
        DataList1.EditItemIndex = e.Item.ItemIndex;
        DataList1.DataBind ();
    }

Butona tıklandığında çağırılan DataList1_EditCommand method'unun bize verdiği "DataListCommandEventArgs" tipindeki "e" parametresinin sahip olduğu "DataListItem" tipindeki "Item" özelliği bize tıklanan butonun bulunduğu sütunu vermektedir. "Item" özelliğinin integer tipindeki "ItemIndex" özelliği ise, sütunun DataList kontrolünün DataSource'unda kaçıncı index'te bulunduğunu almamız için yeterlidir.

"DataList1_DeleteCommand" methodunun içeriğine ise aşağıdaki gibi bir kod yazılmalıdır:

    protected void DataList1_DeleteCommand( object source , DataListCommandEventArgs e )
    {
        // AÇIKLAMA 1
        string m_ID = ( ( Label )e.Item.FindControl ( "UrunIDLabel" ) ).Text;

        // AÇIKLAMA 2
        Urunler.DeleteParameters["original_UrunID"].DefaultValue = m_ID;

        // AÇIKLAMA 3
        Urunler.Delete ();

        // AÇIKLAMA 4
        DataList1.DataBind ();
    }

AÇIKLAMA 1:
    "ItemTemplate" taslağı içerisinde isimlerini verdiğimiz kontrollerimizin yeni değerlerini alarak birer değişkene atıyoruz. Bu işlem sırasında "e.Item.FindControl" özelliğinden faydalanıyoruz.

AÇIKLAMA 2:
    Oluşturduğumuz değişkenin sahip olduğu değeri "Urunler" ismiyle yarattığımız "AccessDataSource" kontrolümüzün "DeleteParameters" bölümünde oluşturulan "original_UrunID" isimli parametresine (Bu parametreler AccessDataSource kontrolümüzü oluştururken otomatik olarak oluşturulmuştu. Bu konu ile ilgili bilgiyi buraya tıklayarak alabilirsiniz.) atıyoruz.

AÇIKLAMA 3:
    AccessDataSource kontrolümüzün sahip olduğu "Delete" methodunu çağırıyoruz. Bu işlem AccessDataSource içerisinde otomatik olarak oluşturulan "Delete" SQL cümlesini çalıştırıyor.

AÇIKLAMA 4:
    DataList kontrolümüzü tekrar bind ediyoruz.


Sıra geldi "EditItemTemplate" taslağını hazırlamaya. Bu taslak, sütun "Edit" moduna girdiğinde oluşturulacak formu hazırlamamızı sağlayan taslaktır. Ben taslağı aşağıdaki gibi oluşturuyorum:

    <EditItemTemplate>
        <table style="width: 100%;">
            <tr>
                <td colspan="2" style="background-color: Silver; font-weight: bold; text-align: center;">
                    <asp:TextBox ID="IsimTextBox" 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:TextBox ID="StokAdediTextBox" runat="server" Text='<%# Eval("StokAdedi") %>' />
                </td>
            </tr>
            <tr>
                <td>
                    Fiyat
                </td>
                <td>
                    <asp:TextBox ID="FiyatTextBox" runat="server" Text='<%# Eval("Fiyat") %>' />
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <asp:LinkButton ID="EditButton" runat="server" Text="Değişiklikleri Kaydet" CommandName="Update" />
                    <asp:LinkButton ID="UpdateButton" runat="server" Text="İptal" CommandName="Cancel" />
                </td>
            </tr>
        </table>
        <br />
    </EditItemTemplate>

Gelelim kırmızı ile işaretlediğim butonlara. Görmüş olduğunuz gibi "Güncelle" butonumuzun yerine "Değişiklikleri Kaydet" ve "İptal" değerinde 2 yeni buton aldı. Peki bu butonlar ne görev yapacak? "CommandName" özelliği "Update" olan method, "GridView" ve "DataList" gibi kontroller için "UpdateCommand" event'ini otomatik olarak çağırmaktadır. "CommandName" özelliği "Cancel" olan buton ise işlemin iptal edildiğini belirten "CancelCommand" event'ini çağırmaktadır. Şimdi bu event'leri tanımlamak için "Events" penceresine gidelim ve bu 2 event'i mouse ile çift tıklayarak oluşturalım:



Method'larımız içleri boş olarak aşağıdaki şekilde görünecektir:



Öncelikle basit bir şekilde yazıp bitirebileceğimiz "DataList1_CancelCommand" method'umuzun içeriğini yazalım. Bu method'un yapması gereken işlem DataList kontrolünün sahip olduğu "EditItemIndex" özelliğini "-1" (eksi bir) değerine çekmek ve DataList kontrolünü tekrar bind etmektir. Bunun için 2 satırdan oluşan bir kod işimizi görecektir:

    protected void DataList1_CancelCommand( object source , DataListCommandEventArgs e )
    {
        DataList1.EditItemIndex = -1;
        DataList1.DataBind ();
    }

Sıra geldi "DataList1_UpdateCommand" methoduna ait kodları yazmaya. Yapmamız gereken işlem, "EditItemTemplate" taslağımız kullanılarak otomatik olarak oluşturulan formun içerisinde yeni yazılan değerleri almak, bu değerleri AccessDataSource kontrolümüze vermek ve bilgileri güncellemesini istemek. Bunun için aşağıdaki şekilde bir kod yazmamız gerekmektedir:

    protected void DataList1_UpdateCommand( object source , DataListCommandEventArgs e )
    {
        // AÇIKLAMA 1
        string m_ID = ( ( Label )e.Item.FindControl ( "UrunIDLabel" ) ).Text;
        string m_Isim = ( ( TextBox )e.Item.FindControl ( "IsimTextBox" ) ).Text;
        string m_StokAdet = ( ( TextBox )e.Item.FindControl ( "StokAdediTextBox" ) ).Text;
        string m_Fiyat = ( ( TextBox )e.Item.FindControl ( "FiyatTextBox" ) ).Text;

        // AÇIKLAMA 2
        Urunler.UpdateParameters["original_UrunID"].DefaultValue = m_ID;
        Urunler.UpdateParameters["Isim"].DefaultValue = m_Isim;
        Urunler.UpdateParameters["StokAdedi"].DefaultValue = m_StokAdet;
        Urunler.UpdateParameters["Fiyat"].DefaultValue = m_Fiyat;

        // AÇIKLAMA 3
        Urunler.Update ();

        // AÇIKLAMA 4
        DataList1.EditItemIndex = -1;
        DataList1.DataBind ();
    }

AÇIKLAMA 1:
    "EditItemTemplate" taslağı içerisinde isimlerini verdiğimiz kontrollerimizin yeni değerlerini alarak birer değişkene atıyoruz. Bu işlem sırasında "e.Item.FindControl" özelliğinden faydalanıyoruz.

AÇIKLAMA 2:
    Oluşturduğumuz değişkenlerin sahip oldukları değerleri "Urunler" ismiyle yarattığımız "AccessDataSource" kontrolümüzün "UpdateParameters" bölümünde oluşturulan parametrelerine (Bu parametreler AccessDataSource kontrolümüzü oluştururken otomatik olarak oluşturulmuştu. Bu konu ile ilgili bilgiyi buraya tıklayarak alabilirsiniz.) atıyoruz.

AÇIKLAMA 3:
    AccessDataSource kontrolümüzün sahip olduğu "Update" methodunu çağırıyoruz. Bu işlem AccessDataSource içerisinde otomatik olarak oluşturulan "Update" SQL cümlesini çalıştırıyor.

AÇIKLAMA 4:
    Formun ortadan kalkması ve DataList kontrolümüzün eski haline dönmesi için DataList kontrolümüzün "EditItemIndex" özelliğine yine "-1" (eksi bir) değerini veriyoruz ve DataList kontrolümüzü tekrar bind ediyoruz.


Şimdi sayfamıza geri gidip herhangi bir ürün üzerindeki "Güncelle" butonuna tıklayalım ve formumuzu görelim:



Evet, ekranımızda "EditItemTemplate" taslağında belirttiğimiz formun aynısı çıktı. Her ne kadar güvenlik işlemleriyle ilgilenmemiş, Fiyat alanına bile karakter girilebilecek bir forma sahip olsak da siz bu örneği kolayca genişletebilir; formun dilediğiniz validasyon kontrollerine sahip olmasını ayarlayabilirsiniz.

Bilgilerden birkaçını güncelleyelim:



"Değişikliklere Kaydet" butonuna tıklayalım:



Bilgilerimiz başarıyla kaydedildi.

Bilgilerden birkaçını tekrar güncelleyelim:



"İptal" butonuna tıklayalım:



Değişiklikler iptal edildi.



Silme işlemini de deneyip örneğimizi sonlandıralım. Ben "Mouse" isimli ürünün sil butonuna tıklayacağım:



"Monitör" isimli ürün silindi. Sonuç olarak;

ASP.NET 2.0 ile gelen DataList kontrolü sayesinde verilerin bir tablo içerisinde listelenmesi, gerektiğinde düzenleme yapmak ve ya veriyi silmek son derece kolay. Özellikle de "AccessDataSource" yardımı ile. Örnek çok kapsamlı bir şekilde genişletilebilir, gerektiğinde validasyonlar koyulabilir ve tüm taslaklar kişisel olarak uyarlanabilir.


Makale ile ilgili tüm soru ve sorunlarınızı http://sunali.com/blog/archive/2005/07/04/31.aspx adresinde yorum olarak sorabilirsiniz.

Coskun SUNALI
http://sunali.com