Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
ASP.NET
C++ / C++.NET
C# / VC#/.NET
XML / Web Serv.
YAZAR HAKKINDA
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ı
:
49638
Yorum Sayısı
:
5
yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Burak Selim Şenyurt
Bellek Yönetiminde Verimlilik için İpuçları (Rust Odaklı)
14.5.2025
Burak Selim Şenyurt
Rust ve Güvenli Bellek Yönetimi Hakkında
14.5.2025
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
Ahmet Faruk Nacaroğlu
/
ASP.NET
/
ASP.NET DataList Kontrolü - 4
ASP.NET DataList Kontrolü - 4
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
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.
ASP.NET DataList Kontrolüne Giriş
ASP.NET DataList Kontrolü - 2
ASP.NET DataList Kontrolü - 3
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
Levent Kartal
/
üye hakkında
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
Emrah Önay
/
üye hakkında
Ç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
zulkuf yıldız
/
üye hakkında
ellerinize ve yüreğinize sağlık çok teşşekürler. iyi çalışmalar.
HAZ
19
2005
Mehmet Yüksek
/
üye hakkında
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
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl