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

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

Yazıya kaldığım yerden devam ediyorum, bu yazıyı okumadan önce aşağıdaki yazıya göz atınız..

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

Örneğimizde şimdiye kadar olan tüm kısımları tamamladık. Şimdi güncelleme yapılmasını sağlamak istiyorum. Kullanıcı veri düzenleme isteğinde bulunduğunda açılan pencere kısmında güncelle butonunu görecek. Dizaynımızda bunu zaten daha önceden ekledik. Dolayısı ile kalan kısım şimdilik sadece code-behind tarafındaki kodlarım. Ben güncelleme işlemini bir stored-procedure kullanarak yapacağım, öncelikle SQL Queryimi yazıyorum.

CREATE PROCEDURE CalisanGuncelle
(
@CalisanID int,
@YeniAd nvarchar (50),
@YeniSoyad nvarchar
)

AS UPDATE Calisanlar
SET Ad=@YeniAd, Soyad=@YeniSoyad 
WHERE CalisanID=@CalisanID

Bu query ile Ad ve soyadı değiştirme işlemim CalisanGuncelle stored procedure ile güncelleniyor.

Daha önceki yazılarda Guncelle linkbutonum için CommandName alanına Guncelle ismini vermiştim. Şimdi DataList kontrolümün ItemCommand eventine bu durumu eklemem gerekiyor,

Yine eklenen kısmı önce veriyorum, yazının sonunda kodların tamamını yansıtacağım.

...
...
else if (e.CommandName == "Guncelle")
        {
            int CalisanID = Convert.ToInt32(e.CommandArgument);
            TextBox txtAd = (TextBox)e.Item.FindControl("txtAd");
            string yeniAd = txtAd.Text;
            TextBox txtSoyad = (TextBox)e.Item.FindControl("txtSoyad");
            string yeniSoyad = txtSoyad.Text;
            KisiGuncelle(CalisanID, yeniAd, yeniSoyad);
            DDLCalisanlar.EditItemIndex = -1;
            VeriListele();
        }
...
...

Üstteki kodda görüldüğü üzere KisiGuncelle metodum ve parametreleri bulunuyor. Şimdi bu metodumu yazıyorum.

...
...
 protected void KisiGuncelle(int CalisanID, string yeniAd, string yeniSoyad)
    {
        //SQL bağlantı ve komut tanımlamalarım.
        SqlConnection conn;
        SqlCommand comm;
        string connectionString = ConfigurationManager.ConnectionStrings["GursoyLtd"].ConnectionString;
        conn = new SqlConnection(connectionString);
        //SQL komut tipimi belirtiyorum.
        comm = new SqlCommand("CalisanGuncelle", conn);
        comm.CommandType = System.Data.CommandType.StoredProcedure;
        //Parametrelerim ve tiplerim nereden alınacağı bilgisi.
        comm.Parameters.Add("@CalisanID", System.Data.SqlDbType.Int);
        comm.Parameters["@CalisanID"].Value = CalisanID;
        comm.Parameters.Add("@yeniAd", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@yeniAd"].Value = yeniAd;
        comm.Parameters.Add("@yeniSoyad", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@yeniSoyad"].Value = yeniSoyad;
        try
        {
            //Bağlantımı açıyorum
            conn.Open();
            //Güncelleme işlemi olacağı için ExecuteNonQuery diyorum, çünkü bir veri listesi dönmeyecek
            comm.ExecuteNonQuery();
        }
            //hata meydana gelirse vereceğim mesaj
        catch
        {
            Response.Write("Güncelleme işlemi esnasında hata oluştu!");
        }
            //Bağlantımı kapama işlemim.
        finally
        {
            conn.Close();
        }
}
...
...

Bu şekilde kodlarımı yazdıktan sonra projemi çalıştırdığımda artık bilgi güncellemek istediğim veri için düzenle butonuna bastığımda güncelleme şablonum açılacak ve gerekli düzenlemenin ardından guncelle linkbutonuna basında veriler güncellenmiş olacak.

DataListOrnek.aspx.cs dosyası tüm kodlarımı birlikte vereyim :

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(); } //Eğer işlem iptalse geri dönülüyor, indeks olmayan -1 döndürülüyor. else if (e.CommandName == "Iptal") { DDLCalisanlar.EditItemIndex = -1; VeriListele(); } //Burada guncelleme işlemi yapılıyor. else if (e.CommandName == "Guncelle") { int CalisanID = Convert.ToInt32(e.CommandArgument); TextBox txtAd = (TextBox)e.Item.FindControl("txtAd"); string yeniAd = txtAd.Text; TextBox txtSoyad = (TextBox)e.Item.FindControl("txtSoyad"); string yeniSoyad = txtSoyad.Text; //Güncelleme işlemi metodum KisiGuncelle(CalisanID, yeniAd, yeniSoyad); DDLCalisanlar.EditItemIndex = -1; VeriListele(); } } //KisiGuncelle metodum protected void KisiGuncelle(int CalisanID, string yeniAd, string yeniSoyad) { //SQL bağlantı ve komut tanımlamalarım. SqlConnection conn; SqlCommand comm; string connectionString = ConfigurationManager.ConnectionStrings["GursoyLtd"].ConnectionString; conn = new SqlConnection(connectionString); //SQL komut tipimi belirtiyorum. comm = new SqlCommand("CalisanGuncelle", conn); comm.CommandType = System.Data.CommandType.StoredProcedure; //Parametrelerim ve tiplerim nereden alınacağı bilgisi. comm.Parameters.Add("@CalisanID", System.Data.SqlDbType.Int); comm.Parameters["@CalisanID"].Value = CalisanID; comm.Parameters.Add("@yeniAd", System.Data.SqlDbType.NVarChar, 20); comm.Parameters["@yeniAd"].Value = yeniAd; comm.Parameters.Add("@yeniSoyad", System.Data.SqlDbType.NVarChar, 20); comm.Parameters["@yeniSoyad"].Value = yeniSoyad; try { //Bağlantımı açıyorum conn.Open(); //Güncelleme işlemi olacağı için ExecuteNonQuery diyorum, çünkü bir veri listesi dönmeyecek comm.ExecuteNonQuery(); } //hata meydana gelirse vereceğim mesaj catch { Response.Write("Güncelleme işlemi esnasında hata oluştu!"); } //Bağlantımı kapama işlemim. finally { conn.Close(); } } }

5 yorum

  1. bu seri burada bitiyor mu yoksa devamı gelecek mi?teşekkürler…

  2. DataList ile alakalı olarak evet bu seri bu 5. yazı ile bitiyor. İlerleyen zamanlarda tekrar DataList örnekleri paylaşmaya çalışacağım. Ben teşekkür ederim.

  3. Öncelikle şunu söyliyeyim artık aramalarımı google da değil bu sitede yapıyorum 🙂
    benim tablom şu şekilde;
    SELECT [ReferanceID]
    ,[FirmaAdi]
    ,[FirmaLogo]
    ,[CategoryID]
    ,[ReferansImageUrl]
    ,[Date]
    ,[YapilanIs]
    ,[SlideGrubu]
    ,[FiltreID]
    ,[KullaniciName]
    Günelleme işlemi yaparken filtre ve category alanlarını dropdown la seçtirip göstermek istiyorum. bunu nasıl uygulayabilirim.

  4. SELECT [ReferanceID]
    ,[FirmaAdi]
    ,[FirmaLogo]
    ,[CategoryID]
    ,[ReferansImageUrl]
    ,[Date]
    ,[YapilanIs]
    ,[SlideGrubu]
    ,[FiltreID]
    ,[KullaniciName]
    iki alanı dropdownlist ile seçtirip güncellemek istiyorum bunu nasıl uygulayabilirim.

  5. basit bir online test sistemi yapmaya çalışıyorum. Test her başladığında rastgele 10 soru geliyor. Soruların yanındaki radio butonlardan doğru cevap seçilip butona basıldığında doğru şıkkın güncellenerek veritabanına tekrar kayıt edilmesini sağlamaya çalışıyorum ama her seferinde @cevap değerinin varsayılan değeri yok htası alıyorum.İçeriklerim datalitte görüntüleniyor.

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    Dim baglanti As OleDbConnection = Nothing
    Dim komut As OleDbCommand = Nothing
    Dim dtReader As OleDbDataReader = Nothing

    baglanti = New OleDbConnection(“provider= microsoft.jet.oledb.4.0;data source=” & Server.MapPath(“~/app_data\burak.mdb”))
    baglanti.Open()
    Dim sorgu As String = “SELECT * FROM soru ”
    komut = New OleDbCommand(sorgu, baglanti)

    dtReader = komut.ExecuteReader()

    Dim sorgu1 As String = “Update soru set soru=@soru,cevapa=@cevapa,cevapb=@cevapb,cevapc=@cevapc,cevapd=@cevapd,dogrucevap=@dogru,cevap=@cevap”
    komut = New OleDbCommand(sorgu1, baglanti)
    komut.Parameters.Add(“@soru”, OleDbType.VarChar).Value = CType(DataList1.Controls(0).FindControl(“lblsoru”), Label).Text.ToString()
    komut.Parameters.Add(“@cevapa”, OleDbType.VarChar).Value = CType(DataList1.Controls(0).FindControl(“lblcvpa”), Label).Text.ToString()
    komut.Parameters.Add(“@cevapb”, OleDbType.VarChar).Value = CType(DataList1.Controls(0).FindControl(“lblcvpb”), Label).Text.ToString()
    komut.Parameters.Add(“@cevapc”, OleDbType.VarChar).Value = CType(DataList1.Controls(0).FindControl(“lblcvpc”), Label).Text.ToString()
    komut.Parameters.Add(“@cevapd”, OleDbType.VarChar).Value = CType(DataList1.Controls(0).FindControl(“lblcvpd”), Label).Text.ToString()
    komut.Parameters.Add(“@dogru”, OleDbType.VarChar).Value = CType(DataList1.Controls(0).FindControl(“lblcvp”), Label).Text.ToString()

    If CType(DataList1.Controls(0).FindControl(“radioa”), RadioButton).Checked = True Then
    komut.Parameters.Add(“@cevap”, OleDbType.VarChar).Value = “A”
    End If
    If CType(DataList1.Controls(0).FindControl(“radiob”), RadioButton).Checked = True Then
    komut.Parameters.Add(“@cevap”, OleDbType.VarChar).Value = “B”
    End If
    If CType(DataList1.Controls(0).FindControl(“radioc”), RadioButton).Checked = True Then
    komut.Parameters.Add(“@cevap”, OleDbType.VarChar).Value = “C”
    End If
    If CType(DataList1.Controls(0).FindControl(“radiod”), RadioButton).Checked = True Then
    komut.Parameters.Add(“@cevap”, OleDbType.VarChar).Value = “D”
    End If

    komut.Parameters.Add(“@uyeadi”, OleDbType.VarChar).Value = Session(“uye_adi”)
    komut.ExecuteNonQuery()
    baglanti.Close()
    baglanti = Nothing

    End Sub

Bir cevap yazın

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