| 
                
             | 
        
        
            
                
                    
                        | 
                            ASP.NET DataList Kontrolü - 4  | 
                        
                             | 
                                
                     
                    
                        
                            
	
    
		
            | Gönderiliyor lütfen bekleyin... |   
        
	 
    
 
                         | 
                     
                 
             | 
        
        
            
                
                 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 
             | 
        
        
            | 
             | 
        
        
            | 
                 
             | 
        
        
            
                
                
                    
                        - 
                            
                        
 
                        - 
                            
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
                         
                     
                 
                
                
             | 
        
        
            | 
                
             |