C#nedir?com
 
YAZAR HAKKINDA
Ahmet Faruk Nacaroğlu
Ahmet Faruk Nacaroğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
40 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: baglanti baglantiyi categoryid datalist description ilgili islemi kaydin kodunda metodu public source tiklaninca verileri veriyi ASP.NET Ahmet Faruk Nacaroğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : ASP.NET
Yayınlanma Tarihi : 30.8.2004
Okunma Sayısı : 38603
Yorum Sayısı : 5     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 21.4.2021
Turhal Temizer
Mac OS/X Removing CUDA 21.4.2021
Burak Selim Şenyurt
Tie Fighter Değil, Project Tye! 21.4.2021
Burak Selim Şenyurt
Stackoverflow Sevgi Anketinde Yıllardır Bir Numara Çıkan Programlama Dili Rust Kimdir? 21.4.2021
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ASP.NET DataList Kontrolü - 4
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
DataList kontrolü hakkıdanki dördüncü makalemizle yine birlikteyiz. Bu makalede DataList kontrolünde görüntülenen verilerin hemen yerinde güncellenmesini ve bu kayıtların DataList içinden çıkmadan silinmesinin nasıl yapılacağını inceleyeceğiz.



DataList kontrolü üzerine daha önce yayımlanan şu makaleleri de okumanızı yine tavsiye ediyorum.

1. ASP.NET DataList Kontrolündeki Kayıtları Güncelleme

DataList kontrolünde görüntülenen herhangi bir kayıttaki verileri güncelleme şansına sahibiz. Kayıtları güncelleme işlemi için bir takım ek kodları yazmamız gerekecektir. Bu gereken ek işler hem web formunun html kodunda hem de arka planda çalışan C# kodunda yapılmalıdır.

HTML kodunda yapılacak değişikler temelde DataList kontrolüne EditItemTemplate eklenmelidir. EditItemTemplate’de verilerin yapısına göre bir takım web kontrollerini eklemek gerekecektir. Bu kontrollerdeki girilen değerlere göre güncelleme işlemini yapacağız. Ayrıca EditItemTemplate’de güncelle ve vazgeç türünde, düğme tipinden, kontroller olacaktır. İsterseniz DataList’imizin html kodunu bir inceleyelim:

<asp:datalist id="DataList1" runat="server"
    OnUpdateCommand="DataList1_UpdateCommand"
    OnCancelCommand="DataList1_CancelCommand"
    OnEditCommand="DataList1_EditCommand"
    ItemStyle-Font-Name="Verdana" Width="90%" >

    <ItemTemplate>
        <TABLE bgcolor="Oldlace" cellSpacing="2" cellPadding="2" width="100%" border="0">
            <TR>
                <TD>CategoryID:</TD>
                <TD align="left">
                    <%# DataBinder.Eval(Container.DataItem, "CategoryID") %>
                </TD>
            </TR>
            <TR>
                <TD>CategoryName: </TD>
                <TD align="left">
                    <%# DataBinder.Eval(Container.DataItem, "CategoryName") %>
                </TD>
            </TR>
            <TR>
                <TD>Description: </TD>
                <TD align="left">
                    <%# DataBinder.Eval(Container.DataItem, "Description") %>
                </TD>
            </TR>
            <TR>
                <TD colspan="2">
                    <asp:LinkButton Runat="server" CommandName="Edit" text="Güncelle"></asp:LinkButton>
                </TD>
            </TR>
        </TABLE>
    </ItemTemplate>

    <EditItemTemplate>
        <TABLE bgcolor="Oldlace" cellSpacing="2" cellPadding="2" width="100%" border="0">
            <TR>
                <TD>CategoryID: </TD>
                <TD align="left">
                    <asp:Label ID="lblCategoryID" Runat=server Text=’<%# DataBinder.Eval(Container.DataItem, "CategoryID") %>’>
                    </asp:Label>
                </TD>
            </TR>
            <TR>
                <TD>CategoryName: </TD>
                <TD>
                    <asp:TextBox ID="txtCategoryName" Runat=server Text=’<%# DataBinder.Eval(Container.DataItem, "CategoryName") %>’>
                    </asp:TextBox>
                </TD>
            </TR>
            <TR>
                <TD>Description: </TD>
                <TD>
                    <asp:TextBox ID="txtDescription" Runat=server Text=’<%# DataBinder.Eval(Container.DataItem, "Description") %>’>
                    </asp:TextBox>
                </TD>
            </TR>
            <TR>
                <TD colspan="2">
                    <asp:linkbutton commandname="update" runat="server" text="Güncelle" ID="Linkbutton1" />
                    <asp:linkbutton commandname="cancel" runat="server" text="Vazgeç" ID="Linkbutton2" />                
                </TD>
            </TR>  
        </TABLE>
     </EditItemTemplate>

    <SeparatorTemplate>
        <hr>
    </SeparatorTemplate>
</asp:datalist></center>
Ornek6.aspx DataList’imizde verileri sadece görüntülerken kullandığımız koddan farklı olarak DataList tanımında 4 tane yeni ifade gözümüze çarpmış olmalı. Bunlar:

   OnUpdateCommand="DataList1_UpdateCommand"
   OnCancelCommand="DataList1_CancelCommand"
   OnEditCommand="DataList1_EditCommand"

’dır. OnEditCommand ile datalist içindeki "Güncelle" düğmesine tıklayınca çalışacak metodu belirler. OnUpdateCommand ise güncelleme işlemini tamamlamak(veri kaynağına kaydın yeni versiyonunu yazmak için ) kullanılacak metoda işaret eder. Son olarak OnCancelCommand ise "Güncelle" düğmesine tıklanınca ilgili kayıdın EditItemTemplate versiyonu görüntülenir. Bu esnada güncellemeden vazgeçilierse "Vazgeç" düğmesine tıklanınca çalışacak kodu belirtir.

İyi de yukarıdaki olaylar nasıl tetiklenecek? Daha doğrusu hangi düğmenin hangi olaya cevap vereceğini .NET Framework nereden anlayacak? Bunun cevabı düğmelerin tanımlarında yatıyor. Mesela ItemTemplate içindeki

<asp:LinkButton Runat="server" CommandName="Edit" text="Güncelle"></asp:LinkButton>

düğmesinin CommandName özelliğine Edit değeri verilmesinin ne gibi bir anlamı olabilir? Aynı şekilde EditItemTemplate içinde yeralan

  <asp:linkbutton commandname="update" runat="server" text="Güncelle" ID="Linkbutton1" />
  <asp:linkbutton commandname="cancel" runat="server" text="Vazgeç" ID="Linkbutton2" />

2 düğmenin CommandName özellikleri ile text özellikleri arasında bir bağ görebiliyormusunuz? :-)

İsterseniz örneğimizin C# kodunuda dikkatli bir biçimde inceleyelim. İşin asıl karmaşık kısmı burda yatıyor gibi:

private void Page_Load(object sender, System.EventArgs e)
{
   if(!Page.IsPostBack)
      VeriyiBagla();
}

public void VeriyiBagla()
{
   // Baglanti nesnemiz:
   SqlConnection baglanti =
            new SqlConnection("server=abuzer;database=Northwind;uid=Ahmet;pwd=ahmet");    // SQL sorgu komutumuz:
   SqlCommand komut = new SqlCommand();
   komut.CommandText = @"SELECT CategoryID, CategoryName, Description FROM Categories";

   // komuta hangi baglantiyi kullancagini bildiriyoruz:
   komut.Connection = baglanti;

   // Veri Adaptörümüz:
   SqlDataAdapter veriAdaptoru = new SqlDataAdapter(komut);

   DataTable veriTablosu = new DataTable(); // Veri tablomuz:

   baglanti.Open(); // Baglantiyi açalim:

   veriAdaptoru.Fill( veriTablosu ); // Veriyi dolduralim:

   baglanti.Close(); // Baglantiyi kapatalim:

   // sonuçlari DataList’e baglayalim:
   DataList1.DataSource = veriTablosu;
   DataList1.DataBind();
}

public void DataList1_EditCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
   DataList1.EditItemIndex = e.Item.ItemIndex;
   VeriyiBagla();
}

public void DataList1_CancelCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
   DataList1.EditItemIndex = -1;
   VeriyiBagla();
}

public void DataList1_UpdateCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
   int categoryID = Convert.ToInt32( ( (Label)(e.Item.FindControl("lblCategoryID"))).Text );
   string categoryName = ((TextBox)e.Item.FindControl("txtCategoryName")).Text.Trim();
   string description = ((TextBox)e.Item.FindControl("txtDescription")).Text.Trim();

   // Baglanti nesnemiz:
   SqlConnection baglanti =
   new SqlConnection("server=abuzer;database=Northwind;uid=Ahmet;pwd=ahmet");

   // SQL sorgu komutumuz:
   SqlCommand komut = new SqlCommand();
   string strSQLKomut = "UPDATE Categories SET " ;
   strSQLKomut += " CategoryName =’" + categoryName + "’, ";
   strSQLKomut += " Description =’" + description + "’";
   strSQLKomut += " WHERE CategoryID=" + categoryID + ";";

   komut.CommandText = strSQLKomut;

   // komuta hangi baglantiyi kullancagini bildiriyoruz:
   komut.Connection = baglanti;

   try
   {
      baglanti.Open();
      komut.ExecuteNonQuery();
   }
   catch(SqlException ex)
   {
      throw new Exception(" Hata meydana geldi", ex );
   }
   finally
   {
      baglanti.Close();
   }

   Response.Write(" Güncelleme işlemi tamamlandı... ");

   DataList1.EditItemIndex = -1;
   VeriyiBagla();
}

Ornek6.aspx.cs Yukarıdaki C# kodunda çok aşina olduğumuz bir kaç metot bulumaktadır. Bunlardan birnicisi VeriyiBagla() diğeri Page_Load()’dır. Veriyi bağla bundan önceki DataList ve Repeater makalelerimizde defaatle açıkladığımız için tekrar açıklamak ihtiyacını hissetmiyorum.

Öncelikle sayfa ilk defa yüklennice Page_Load() metodu çalışır. Bu metot içinde biz hemen VeriyiBagla() metodunu kullanarak ilgili verileri DataList kontrolümüze bağlıyoruz. Kullanıcı eğer "Güncelle" düğmesine tıklarsa hemen DataList1_EditCommand metodu çalışacaktır. Bu metot içinde neler olup bitiyor bir bakalım. DataList’in EditItemIndex özelliğine e’den (e DataListCommandEventArgs sınıfından bir nesnedir) gelen ItemIndex’indeki değeri atıyoruz. Hemen ardından ise DataList’i tekara bağlayıp görüntülüyoruz. Bu aşada DataList’imiz görünümü, örneğimize göre şu şekilde olacaktır:



Bu durumda iki farklı işlem yapma şansımız vardır. Eğer "Güncelle" düğmesine tıklarsanız yaptığınız değişikleri kaydetmek üzere DataList1_UpdateCommand metodu çalıştırılır. Bu metot içinde ise öncelikle ilk üç satırda kullanıcının girdiği verileri almak için bir takım işlemler yapılıyor. Bu işlemler:

 int categoryID = Convert.ToInt32( ( (Label)(e.Item.FindControl("lblCategoryID"))).Text );
 string categoryName = ((TextBox)e.Item.FindControl("txtCategoryName")).Text.Trim();
 string description = ((TextBox)e.Item.FindControl("txtDescription")).Text.Trim();

’dir. EditItemTemplate’de tekrar göz atacak olursanız, orda 2 textbox ve bir label bulunmaktadır. Bu kontrollerdeki değerleri almak için herbirindeki Text özelliklerinden yararlanmalıyız. Ama önce herbir kontrolü bulmamız gerekiyor. Kontrolleri bulmak için e’nin Item özelliğinin FindControl() metodundan yararlanıyoruz. Herbir FindControl() içinde ilgili kontrolün (EditItemTemplate içindeki) ismi yazıyoruz. Metot içinde geri kalan ksımlar klasik ADO.NET güncelleme işinden ibarettir. Son olarak ise veriyi son haliyle bağlamak için VeriyiBagla() metodu çağrılıyor.

Diğer taraftan "Vazgeç" düğmesine tıklayınca ise DataList1_CancelCommand metodu çalıştırılıyor. Bu metot 2 satırdan oluşmaktadır. İlk satırda DataList’in EditItemIndex özelliğine "-1" değerini atıyoruz ki sonraki satıda veriyi tekrar bağlayınca hiç bir eleman edit modunda olmasın.

2. ASP.NET DataList Kontrolündeki Kayıtların Silinmesi

DataList’in içinde görüntülenen bir kaydı silmek için izlenen yol ile güncellemek için izlenen yollar birbirlerine çok benziyor. Bundan dolayı birinci örneğimizin üzerine Silme örneğimizi ekleyelim. Öncelikle yukarıdaki html kodunun

       <asp:linkbutton commandname="update" runat="server" text="Güncelle" ID="Linkbutton1" />
       <asp:linkbutton commandname="cancel" runat="server" text="Vazgeç" ID="Linkbutton2" />

kısmına  <asp:linkbutton commandname="Delete" runat="server" text="Sil" ID="Linkbutton3" /> satırını ekleyelim. Bu satırla birlikte artık güncellme modunda bir de "Sil" düğmemiz olacaktır.



Ayrıca "Sil" düğmesine tıklanınca çalışacak metodu belirtmek için DataList tanımı içindeki

<asp:datalist id="DataList1" runat="server"
    OnUpdateCommand="DataList1_UpdateCommand"
    OnCancelCommand="DataList1_CancelCommand"
    OnEditCommand="DataList1_EditCommand"
    ItemStyle-Font-Name="Verdana" Width="90%" >

kısmı şu şekilde olacak biçimde değiştiriniz:

<asp:datalist id="DataList1" runat="server"
    OnUpdateCommand="DataList1_UpdateCommand"
    OnDeleteCommand="DataList1_DeleteCommand"
    OnCancelCommand="DataList1_CancelCommand"
    OnEditCommand="DataList1_EditCommand"
    ItemStyle-Font-Name="Verdana" Width="90%" >

Sil" düğmesine tıklanınca çalışacak metodu, yani DataList1_DeleteCommand, belirtik ama onu henüz yazmadık. Bu metodu şu şekilde yazmalıyız:

public void DataList1_DeleteCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
   Label lbl_CategoryID = (Label)e.Item.FindControl("lblCategoryID");

   int categoryID = Convert.ToInt32(lbl_CategoryID.Text);

   // Baglanti nesnemiz:
   SqlConnection baglanti =
   new SqlConnection("server=abuzer;database=Northwind;uid=Ahmet;pwd=ahmet");

   // SQL sorgu komutumuz:
   SqlCommand komut = new SqlCommand();
   komut.CommandText = @"DELETE FROM Categories WHERE CategoryID =" + categoryID;
   // komuta hangi baglantiyi kullancagini bildiriyoruz:
   komut.Connection = baglanti;

   try
   {
      baglanti.Open();
      komut.ExecuteNonQuery();
   }
   catch(SqlException ex)
   {
      throw new Exception(" Hata meydana geldi", ex );
   }
   finally
   {
      baglanti.Close();
   }

   Response.Write(" Silme işlem tamamlandı... ");

   DataList1.EditItemIndex = -1;

   VeriyiBagla();
}

Bildiğiniz gibi biz işlemlerimizi ilişkisel veritabanlarında yapıyoruz. Bundan dolayı her kaydın bir anahtar alanı olmalı. Bizim örneğimizde anahtar alanımız CategoryID’dir. Silmek istediğimiz kaydın bu alanındaki değeri bilmemiz bizim için yeterli olacaktır. Bu değeri elde etmek için ilgili kontrolü (lblCategoryID) bulmamız gerekiyor. Bu işlem için ilk satırdaki kodu yazıyoruz. Sonra bu kontrolün Text özelliğindeki değeri alıp onu gerekli veri tipine(Int32) çeviriyoruz. Metot içinde kalan kısım (tıpki güncelleme işlemindeki gibi) klasik bir ADO.NET işlemidir. Tek farkı burda silme işlemi yaparken öncesinde güncelleme işlemi yapıyoruz. Son iki satırda ise DataList’in EditItemIndex özelliğini "-1"’e eşitiliyor ve tekrar veriyi bağlıyoruz.

Yukarıdaki resimlerde seçilmiş kayıdı ( yani CategoryID = 4 ) olanı silince DataListin görünümü şu şekilde olacaktır:



Bir makalemizin sonuna daha geldik. Bu makalede, DataList içindeki bir kaydın nasıl güncelleneceğini ve silineceğini inceledik.

Bu ve DataList ile ilgili önceki makalelerimizdeki örneklerin kodlarını indirmek tıklayınız.

Makale:
ASP.NET DataList Kontrolü - 4 ASP.NET Ahmet Faruk Nacaroğlu
  • Yazılan Yorumlar
  • Yorum Yaz
MAY
1
2011
Merhabalar. Çok yararlı bir makale yazdığınızı belirtmek isterim öncelikle. Yalnız bir sorum olacak. Güncelleme işlemleri için TextBox örneğinizi inceledim. Bir proje için DropDownList kullanmam gerekiyor. Bu ddl de bilgileri veritabanından çekiyor. edititemtamplate'te ddl'de seçili olan değeri döndüremiyorum. Normalde textbox veya başka bir nesneden farklı olmaması gerekiyor gibi düşündüm ama bilemedim. Teşekkür ederim.
HAZ
7
2010
Çok güzel bir çalışma olmuş. bir önceki makalede dosyaları göremeyince mesaj yazmıştım ama hepsi buradaymış. Paylaşıumınız için çok teşekkürler...
KAS
22
2006
ellerinize ve yüreğinize sağlık çok teşşekürler. iyi çalışmalar.
HAZ
19
2005
Elinize ve dilinize sağlık. Sanırım daha fazlasını yapmak isteyen artık bu anlatımınızdan sonra yapabilir. Teşekkür ederim size ve siteye ve üyelerine.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor