Makale Özeti

Bu makalemizde, AspNet 2.0 ile birlikte gelen ve yeni kontrollerden birisi olan GridView kontrolü üzerinde, veri güncelleme ve veri silme gibi işlemlerin programatik olarak nasıl yapılacağını incelemeye çalışacağız.

Makale

Asp.Net 2.0 GridView Kontrolünde Dinamik Update,Delete İşlemleri

Bu makalemizde, AspNet 2.0 ile birlikte gelen ve yeni kontrollerden birisi olan GridView kontrolü üzerinde, veri güncelleme ve veri silme gibi işlemlerin programatik  olarak nasıl yapılacağını incelemeye çalışacağız.

 Gridview veri kaynağından gelen verilerin düzenli bir şekilde istemci ekranında  görüntülenmesini sağlar.Asp.Net ten önce verilerin liste halinde görüntülenmesi için Table kullanırdık.Asp.Net 1.0 ve 1.1  ile geliştirdiğimiz web uygulamalarımızda ise  çok kullanışlı bir veri kontrol nesnesi olan Datagrid’i kullanırdık.Datagrid ile birlikte çeşitli veri kaynaklarından çekilen veriler çok kolay bir şekilde listelenebiliyordu.Asp.Net 2.0 ile birlikte Datagrid yerini daha gelişmiş bir kontrol olan Gridview ‘a bıraktı.

Gridview kontrolünün öne çıkan özelliklerini sayacak olursak;

  • Yeni datasource kontrollerini destekler.

  • Mobile ve diğer uygulamalarla uyumluluğu çok fazladır.

  • Hiç kod yazmadan gridview üzerinde paging ve sorting işlemleri yapabiliriz.

  • Hiç kod yazmadan  delete ve update işlemlerini yapabiliriz.

  • Şablonlar ile çalışma özelliği oldukça gelişmiş.

Yeni bir kontrol olan gridview sqldatasource ile birlikte kullanıldığında tek satır kod yazmadan tamamen otomatik olarak update,delete,insert işlemleri yapılabiliyor fakat bazı sayfalarda gridview için sorgulara bağlı olarak  birden fazla datasource kullanabiliyoruz.Böyle durumlarda gridview üzerinde insert,update,delete işlemlerimizi dinamik olarak yapmak zorundayız.Gridview üzerinde  update ve delete işlemleri sırasında

RowEditing,RowCancelingEdit,RowUpdating,ve RowDeleting eventları tetiklenir.Bizim amacımız bu eventları code-behind tarafında yakalamak olacak.Bu eventları kullanacağımız bir senaryo düşünerek uygulamamıza başlıyalım.Projemizde personel bilgilerinin tutulduğu basit bir veritabanımız olsun.Bu veritabanına ait Table’ımızı tasarlıyalım.

 

Kaldığımız yerden devam edecek olursak eklediğimiz bounfield alanlarını tek tek templatefield’a çevirerek bazı değişiklikler yapacağız.Bunun için column’ı seçip Convert this field into a TemplateField linkine tıklıyoruz.Column’ları TemplateField’a çevirdikten sonra Gridview’ın task panelinden Edit Templates alanına girip cinsiyet sütununun EditItemTemplate bölümündeki label’ı silip cinsiyet seçimi için bir Dropdownlist kontrolü ekliyoruz.Daha sonra tarih sütununun EditItemTemplate alanındaki textbox kontrolüne ajax control toolkit extenderlarından Calender Extender controlünü ekliyoruz.Databinding ifadesi olarak Bind("dogumtarih", "{0:dd/MM/yyyy}") yazıyoruz.Bind ifadesinde ilk parametremiz referans sütunu,ikinci parametremiz formatlama.Bu işlemleri tamamladıktan sonra unutmadan son olarak sayfamızda ajax controlü kullandığımız için sayfamıza bir tane ScriptManeger ekliyoruz.Bu işlemleri tamamladıktan sonra artık code-behind tarafında kodlamaya geçebiliriz.

 

Sayfamızda kullanılan ajax-extender kontrolü sayısı arttıkça response-resquest trafiği artacak ve performans kaybı yaşanacaktır.ScriptManeger kullanılan sayfalarda kontrol sayısına bağlı olarak ayrı ayrı serverdan requestte bulunulur.Fakat ToolScriptManeger ile sayfada bulunan bütün ajax controlleri için tek seferde serverdan requestte bulunulur.Yani kontrol sayısına bağlı olarak ayrı ayrı dosya yüklenmesi olmaz ve response-request trafiği azalmaktadır.Bu açıdan sayfada kullanılan ajax-extender kontrolünün sayısı arttıkça ToolScriptManeger kullanmak performans açısından  önemli bir iyileşme sağlıyacaktır.

 

İlk olarak Page_Load da  veritabanından verilerimizi çekip gridview e bağlıyoruz.Daha sonra  RowEditing,RowCancelingEdit,RowUpdating, ve RowDeleting eventlarını code-behind tarafında yakalıyoruz.  

string cnct = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["grid"].ConnectionString;

   protected void Page_Load(object sender, EventArgs e)

      {

       if (!IsPostBack)

         grid_fill();

      }

private void grid_fill()

    {

SqlConnection con = new SqlConnection(cnct);

   if(con.State==ConnectionState.Closed)

   con.Open();

   SqlCommand com=new SqlCommand();

   com.Connection = con;

   com.CommandType=CommandType.StoredProcedure;

   com.CommandText="usr_select";

   SqlDataReader dr=com.ExecuteReader();

  DataTable dt = new DataTable();  

  dt.Load(dr);

  GridView1.DataSource = dt;

 GridView1.DataBind();

 }

 

***RowEditing eventı ile Edit işlemi yani seçilen  satırdaki verileri düzenleme için satırı aktif hala getiriyoruz

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

    {

        GridView1.EditIndex = e.NewEditIndex;

        GridView1.DataBind();

        grid_fill();

    }

***RowCancelingEdit eventı ile güncelleme işleminin iptalını yapıyoruz

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

    {

        GridView1.EditIndex = -1;

        GridView1.DataBind();

        grid_fill();

}

***RowDeleting eventı ile seçili satırı siliyoruz

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

    {

        string gidtcno = GridView1.DataKeys[e.RowIndex].Values[0].ToString(); ///Gridview ın DataKeyNames property sine parametre olarak "tcno" vermiştik.DataKeys ile seçilen satırın değerini yani "tcno" sunu alıyoruz.

        SqlConnection con = new SqlConnection(cnct);

        if (con.State == ConnectionState.Closed)

            con.Open();

        SqlCommand cmd = new SqlCommand();

        cmd.Connection = con;

        cmd.CommandType = CommandType.StoredProcedure;

        cmd.CommandText = "usr_delete";

        cmd.Parameters.AddWithValue("@tcno",gidtcno);

        cmd.ExecuteNonQuery();

        grid_fill();

    }

***RowUpdating event ı ile seçilen satırı güncelliyoruz.

***Gridview ın DataKeyNames propertysine parametre olarak tcno yazıyoruz. 

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

    {

        SqlConnection con = new SqlConnection(cnct);

        if (con.State == ConnectionState.Closed)

            con.Open();

        int id = e.RowIndex;

        string tcnogrid = GridView1.DataKeys[e.RowIndex].Value.ToString();

        TextBox gridtcno = (TextBox)GridView1.Rows[id].FindControl("Textbox1"); ////Güncelleme için Gridview deki EditItemTemplatefield alanında bulunan Textbox a yazılan yeni değeri alıyoruz.

        TextBox gridadi = (TextBox)GridView1.Rows[id].FindControl("Textbox2");

        TextBox gridsoyadi = (TextBox)GridView1.Rows[id].FindControl("Textbox3");

        DropDownList gridcins = (DropDownList)GridView1.Rows[id].FindControl("DropDownList1");

        TextBox griddgtarh = (TextBox)GridView1.Rows[id].FindControl("Textbox5");

        /////////

        SqlCommand comd = new SqlCommand();

        comd.Connection = con;

        comd.CommandType = CommandType.StoredProcedure;

        comd.CommandText = "usr_update";

        comd.Parameters.AddWithValue("@tcno", tcnogrid);

        comd.Parameters.AddWithValue("@updttcno", gridtcno.Text);

        comd.Parameters.AddWithValue("@adi", gridadi.Text);

        comd.Parameters.AddWithValue("@soyadi", gridsoyadi.Text);

        comd.Parameters.AddWithValue("@cinsiyet", gridcins.Text);

        comd.Parameters.AddWithValue("@dtarih", griddgtarh.Text);

        comd.ExecuteNonQuery();

        grid_fill();

        GridView1.EditIndex = -1;

        GridView1.DataBind();

    }

--------- 

Ve uygulamamızın son hali......

 

update.bmp