Son Haberler
Anasayfa / Yazılım / ASP.NET / DataList Kontrolü ile Veri Güncelleme, Veri Listeleme – 4

DataList Kontrolü ile Veri Güncelleme, Veri Listeleme – 4

Yazıma kaldığım yerden devam ediyorum. Bu yazıyı okumadan önce, önceki yazıları okuyunuz. Bir önceki yazı;

DataList Kontrolü ile Veri Güncelleme, Veri Listeleme – 3

Şimdi örneğimde kullanıcı detay bilgisini göster link butonunun altında, düzenleme yapılabilmesi için bir adet link butonum daha yer alacak. İlk olarak ItemTemplate alanına bir adet daha linkbutton ekliyorum. Yazımın sonunda tüm kodları bir arada vereceğim, şimdi parça parça veriyorum.

DataListOrnek.aspx dosyamda ItemTemplate içinde yeni eklenen linkbutton kontrolüm için kodlarım :

...
...
 CommandName="KisiDuzenle" CommandArgument=<%#Eval("CalisanID") %>>
...
...

Böylelikle şu anda elde ettiğim sonuç :

Düzenleme linkbutonuma tıklandığında ilgili veri için düzenleme moduna geçebilmem gerekiyor. Bunu yapabilmem için DataList kontrolünün EditItemTemplate şablonu üzerinde çalışmam gerekiyor. Dolayısı ile öncelikle DataList kontrolümün içinde EditItemTemplate şablonunu ekleyeceğim. Peki bu şablon içinde ne olacak? Ben alınan veri içinde Çalışan kişinin Ad ve Soyadında düzenleme yapmak istiyorum. Dolayısı ile iki adet textbox kontrolü kullanacağım. Sonra bu duruma ek olarak iki adet linkbutonum olacak, güncelle ve iptal işlemlerim içinde bunları kullanacağım. Veri güncelleme yapmak istiyorsam güncelle butonunu kullanacağım vazgeçecek isem iptal butonu.. Şimdi bu kontrolleri şablon içine alayım.

DataListOrnek.aspx formu DataList kontrolümün içinde :

...
...

        AD : >
SOYAD : >
> >
... ...

Kontrollerimizi yerleştirdik, şimdi diyelimki bir kullanıcı üzerinde veri düzenlemesi yapılacak, ilgili kullanıcıyı düzenle diyeceğiz ve bunu dediğimiz anda Code Behind tarafında bir event tetiklenmesi gerekiyor. Hangi event? Bir önceki yazıda da bahsetmiş olduğum DataList kontrolümün ItemCommand eventi tetikleniyor. Şimdi bu event altında if karar yapımın hemen altına şu kodları ekliyorum :

...
...
else if (e.CommandName == "KisiDuzenle")
        {
            DDLCalisanlar.EditItemIndex = e.Item.ItemIndex;
            VeriListele();            
        }
...
...

Şimdiye kadar yaptıklarım ile nereye ulaşmışız bir görelim.

Buraya kadar geldik, şimdi geri kalan işlem güncelleme işlemi ve yanlışlıkla buraya girildi ise iptal etme işlemi. Ben bu yazımda iptal etme işlemini de anlatayım, bir sonraki yazıda sadece güncelleme olsun. Çünkü güncelleme kısmında veritabanı işlemleri de yapmam gerekecek.

Kullanıcı iptal butonuna bastığında çalışacak kodlarım; en son yazdığım else if bloğunun altında;

...
...
else if (e.CommandName == "Iptal")
        {
            DDLCalisanlar.EditItemIndex = -1;
            VeriListele();
        }
...
...

Kullanıcı İptale bastığında veri güncelleme-düzenleme işlemi yapılmayacak. Görüldüğü gibi geri dönüş yapabilmek için EditItemIndex değerimi -1’e eşitlemem yeterli. -1 dediğimde herhangi bir veri alanı kast edilmiyor, böylelikle işlem yapmadan geri dönebiliyorum.

Şimdi tüm kodlarımı bir arada vereyim :

DataListOrnek.aspx Dosyası :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataListOrnek.aspx.cs" Inherits="DataListOrnek" %>





    


    
DEPARTMAN : <%#Eval("Departman")%>
AD : <%#Eval("Ad")%>
SOYAD : <%#Eval("Soyad")%>
CommandName="DahaFazlaDetay" CommandArgument=<%#Eval("CalisanID")%>>
CommandName="KisiDuzenle" CommandArgument=<%#Eval("CalisanID") %>>
AD : >
SOYAD : >
> >

DataListOrnek.aspx.cs Dosyası :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;

public partial class DataListOrnek : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //verilerim tekrarlanmasın diye eğer sayfam ilk kez yükleniyorsa yani daha önceden post back edilmemişse
        //metodum çalışmaya başlıyor.
        if (!IsPostBack)
        {
            VeriListele();
        }        
    }
    //metodum
    private void VeriListele()
    {
        //SQL bağlantımı, Sql komutumu ve Reader nesnemi oluşturuyorum.
        SqlConnection conn;
        SqlCommand comm;
        SqlDataReader reader;
        //Sql bağlantımı configuration manager sınıfı vasıtası ile web configden çekiyorum.
        string connectionString = ConfigurationManager.ConnectionStrings["GursoyLtd"].ConnectionString;
        conn = new SqlConnection(connectionString);
        //Sql query burada, SELECT işlemi ile iki tablodan veri alıp tek bir tablodan veri okunuyor gibi oluyor.
        comm = new SqlCommand("SELECT Calisanlar.CalisanID,Bolumler.Departman, Calisanlar.Ad, Calisanlar.Soyad FROM Bolumler INNER JOIN Calisanlar ON Bolumler.DepartmanID = Calisanlar.DepartmanID", conn);
        try
        {
            //Bağlantımı açıyorum.
            conn.Open();
            //ExecuteReader kullanıyorum çünkü bana bir liste veri dönecek.
            reader = comm.ExecuteReader();
            //DataListimi veri ile bağlıyorum ve veri ile dolduruyorum.
            DDLCalisanlar.DataSource = reader;
            DDLCalisanlar.DataBind();
            //Okuma işlemi bitince Reader nesnemi kapatıyorum.
            reader.Close();
        }
            //Hata meydana gelirse catch bloğum çalışacak.
        catch
        {
            Response.Write("Veri listelenemedi, hata oluştu!!");
        }
            //Her ne olursa olsun sonuçta veri tabanı bağlantımı sağlayan nesnemi kapatıyorum.
        finally
        {
            conn.Close();
        }

    }
    protected void DDLCalisanlar_ItemCommand(object source, DataListCommandEventArgs e)
    {
        //Butonuma bir command name atamıştım eğer bu commandname verisinden DahaFazlaDetay bilgisi geliyorsa bu bloğum çalışıyor.
        if (e.CommandName == "DahaFazlaDetay")
        {
            //Bir literal kontrol burada oluşturuluyor ve bu item LitDetay ile bağlanıyor.
            Literal li;
            li = (Literal)e.Item.FindControl("LitDetay");
            //literal kontrolümde gösterilecek bilgiyi CommandArgument özelliği ile çekiyorum.
            li.Text = "Çalışan ID: " + e.CommandArgument + "
"; } //Eğer alınan CommandName değeri KisiDuzenle ise aşağıdaki işlemi yapıyor. else if (e.CommandName == "KisiDuzenle") { DDLCalisanlar.EditItemIndex = e.Item.ItemIndex; VeriListele(); } else if (e.CommandName == "Iptal") { DDLCalisanlar.EditItemIndex = -1; VeriListele(); } } }

Bir sonraki yazımda da güncelleme kısmı yapılacak.. Bir sonraki yazı :

DataList Kontrolü ile Veri Güncelleme, Veri Listeleme

2 yorum

  1. İsmail bey allah sizden razı olsun. Ben bugunlere geldiysem siz ve sizin gibi kişilerin bilgisi ile geldim. Tüm Paylaşımlarınızdan bilgi akıyor istediğim gibi kullanıp eğip bükebiliyorum verdiğiniz bilgileri ve de hiç sorunsuz. Teşekkürler.

  2. Hocam asp.net visualbasicte form1deki dataliste tablomdaki verileri çekiyorum.Datalistimde bir incele linkbutonum var.İncele linkime tıklandığında urun numarasına göre form2deki datalisteme o ürüne ait detayları göstermesini istiyorum.Detayları veritabanından başka bir tablodan çekicem.Proje ödevi olarak e-ticaret sitesi aldım.C#’taki kodlarınıza baktım ama yazarken birkaç yerde hata aldım.Bana yardımıcı olursanız sevinirim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir