| Ana Sayfa | Dersler | Download | Forum |Bize Ulaşın  |Siteni Ekle | Ziyaretçi Defteri |


  Getirdiği Avantajlar
  Bağlantısız Katmanda Çalışmak
  Bağlantılı Katmanda Çalışmak
  Strored Procedure'ler İle Çalışmak
  ASP.NET ile DataGrid Kullanımı (C#)
  ASP.Net İle Oracle Üzerinde Çalışmak
  İç İçe Repeater Kullanımı
  TextBox ve DropDownList Data Binding   

ASP.NET ile DataGrid Kullanımı (C#)

DataGrid sayesinde verilerinizi, kullanıcılarınıza çok kolay bir şekilde gösterebilirsiniz. Genellikle raporlama işlemlerinde kullanacağınız DataGrid ile sayfalama, kayıtları değiştirme vs. gibi bir çok özelliği çok kolya bir şekilde yapabilirsiniz.

Makalemiz boyunca vereceğimiz örnekler, C# diliyle Visual Studio .NET ortamında ve Access Database ile olacağı için bir çok arkadaşımıza güzel bir kaynak olacağına inanıyorum.

Adım adım gideceğimiz uygulamamızın sonunda, elinizde mükemmel bir kaynak olacak. İsterseniz hemen başlayalım.

1) Yeni bir Web Application açıyoruz ve DataGrip.aspx olarak yeni bir web form oluşturuyoruz. Uygulamamız CodeBehind şeklinde olacağı için kodlarımız DataGrid.aspx.cs dosyasında bulunacak.

2) Toolbar dan sürükle bırak yardımıyla, bir adet DataGrid nesnesini sayfamıza koyalım. Farkettiğiniz üzerine DataGrid nesnemizin adı DataGrid1 oldu. Kodlama sırasında nesnemizin adı önemli olduğu için, doğabilecek karışıklıklarıda önlemek amacıyla, Properties penceresinden DataGrid nesnemizin (ID) özelliğini, varolan DataGrid1 değeri yerine myGrid olarak değiştirelim.

3) Properties ekranında bulunan auto format ile DataGrid inize istediğiniz formatı verebilrsiniz. Biz Professional1 Formatı nı seçiyoruz.

4) Properties ekranında bulunan bir önemli özellik de AutoGenerateColumns.
Değerinin true olması durumunda, DataGrid e bağlanan verikaynağı ile aynı özellikleri kullanarak run-time da oluşturulacaktır. Yani bir nevi veritabanına ait tabloyu size sunacaktır.
Değerinin false olması durumunda ise, run-time oluşturulmayacak ve siz istediğiniz kolanları ekleyebilecek ve hatta verilerin gösterimini bile değiştirebileceksiniz. Biliyorum, eğer ilk uygulamanızsa kafanız biraz karışmış olabilir. Ancak biz iki türlüsünü de deneyeceğimiz için biraz sabretmenizi istiyorum. Şimdilik değerini true olarak ayarlayınız.

5) Bir Önemli özelliğimiz ise, yine properties penceresinden erişebileceğiniz AllowPaging. Eğer DataGrid imizde otomatik olarak sayfalama yapmak istersek bu değeri true olarak değiştirmemiz gerekecektir. Biz şimdilik değerini false olarak ayarlayacağız. (Herşey sırayla.)

6) Şimdi, hafiften kod kısmına geçelim. Sayfamızın Load eventine ulaşarak gerekli veritabanı bağlantılarını gerçekleştireceğiz. Ve ardından verilerimizi DataGrid imize bağlayacağız. Hatırlatmama gerek var mı bilmiyorum, gerekli namespace leri lütfen import etmeyi unutmayınız.
Biz makalemizde herkezde MSSQL server olmaması ihtimaline karşın Access DataBase dosyası ile OleDB bağlantısı yapacağız. İsterseniz SQL bağlantısı ile de tüm işlemleri gerçekleştirebilirsiniz.
Varolan veritabanını makalemizin sonunda bulunan linkten dosyayı indirerek kullanabilirsiniz.

private OleDbDataAdapter oleAdap;
private DataSet ds;

private
void Page_Load(object
sender, System.EventArgs e)
{

//bağlanti cümlemizi belirtiyoruz
OleDbConnection oleConn;

oleConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; DATA Source=" + Server.MapPath("db/db.mdb"));

// OleDbDataAdapter ile Command cümlemizi giriyoruz
oleAdap =
new OleDbDataAdapter("SELECT * FROM namestable", oleConn);

// Yeni bir DataSet oluşturup
ds =
new DataSet();

// bu DataSet e verileimizi dolduruyoruz.
oleAdap.Fill(ds,"namestable");

// DataGrid imizin veri kaynağını belirtiyoruz.
myGrid.DataSource = ds;

// ve verilemizi bağlıyoruz.(PostBack değilse)
if(!IsPostBack) myGrid.DataBind();

}

Bu kodları yazdıktan sonra projenizi çalıştırdığınızda, veritabanındaki tüm verilerin DataGrid içersinde liselendiğini göreceksiniz.

Gördüğünüz gibi bu haliyle DatGrid imiz pek hoş durmuyor, ve ayrıca pek de bir özelliği yok. Sadece veritabanındaki verileri komple listeledi. Şimdi isterseniz yavaş yavaş daha kullanışlı bir hale getirelim.

7) Öncelikle DataGrid imize ait properties ekranında bulunan Property Builder linkine tıklayalım ve Columns sekmesine gelelim. Karşınıza aşağıdaki gibi bir ekran çıkacaktır.

8) En yukarıda bulunan Create columns automaticaly at run time ChackBox ını boş bırakın. Bu makalemizin başında bahsettiğimiz AutoGenerateColumns ile aynı işi yapmaktadır.

9) Öncelikle 6 adet Bound Column seçip sağ tarafa geçirin. Yukarıdaki şekilde ID alanına ait Bound Column sağ tarafa geçirilmiş durumda. Ve Header Text ve Data Field özellikleri bizim tarafımızdan doldurulmuştur.
Header Text; DataGrid de o alanın en yukarsında yazılması istenen başlıktır.
Data Field ise; veritabanımızdaki alanın ismidir.
Bu şekilde; name, surname, age, tel ve fax alanlarımızıda Bound Column olarak olşturuyoruz. DataField kısımlarına sırasıyla; name, surname, age, tel, fax yazıyoruz. Header Text kısımlarına ise sırasıyla; İsim, Soayad, Yaş, Telefon, Fax yazıyoruz.

Bu ekranda en altta görülen Read Only CheckBox ı; DataGrid in Edt Modunda iken var alon alanın asla değiştirilmemesini sağlar. Bu kullanıma en uygun alan ID alanımız için bu ChechkBox ı seçiyoruz.

10) Şimdiye kadar eklediğimiz kolonlar,  veri tabanından verilerimiz almak için gereken kolanlardı. Şimdi ise birde Button Column ekleyeceğiz. Button Columunlar göreceğiniz üzere bir kaç alternatiften oluşmaktadır. Biz öncelikle Edit, Update, Cancel Kolonu ekleyeceğiz. Aşağıdaki şekildeki gibi bir ekleme yapınız.

11) Birde Button Columnlardan Delete Column u ekleyelim. Header Text ini Sil olarak değiştirelim ve Button Type kısmını da PushButton yapalım.

12) Son olarak da bir adet HyperLink Column Ekleyelim. Gereli ayarlarıda aşağıdaki gibi yapalım.

13) Gerekli görsel ayarları yaptıktan sonra, gerekli kodlara geçelim;

14) Öncelikle DataGrid imizin EditCommand Event i içersine aşağıdaki kodu girelim.

private void myGrid_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
myGrid.EditItemIndex = e.Item.ItemIndex;
myGrid.DataBind();
}

15) DataGrid imizin CancelCommand Event i içersine aşağıdaki kodu girelim.

private void myGrid_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
myGrid.EditItemIndex = -1;
myGrid.DataBind();
}

16) DataGrid imizin CancelCommand Event i içersine aşağıdaki kodu girelim.

private void myGrid_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
myGrid.EditItemIndex = -1;
myGrid.DataBind();
}

17)  DataGrid imizin UpdateCommand Event i içersine aşağıdaki kodu girelim.

private void myGrid_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
TextBox txt1 = (TextBox)e.Item.Cells[1].Controls[0];
TextBox txt2 = (TextBox)e.Item.Cells[2].Controls[0];
TextBox txt3 = (TextBox)e.Item.Cells[3].Controls[0];
TextBox txt4 = (TextBox)e.Item.Cells[4].Controls[0];
TextBox txt5 = (TextBox)e.Item.Cells[5].Controls[0];

ds.Tables[0].Rows[e.Item.ItemIndex].BeginEdit();
ds.Tables[0].Rows[e.Item.ItemIndex][1]= txt1.Text;
ds.Tables[0].Rows[e.Item.ItemIndex][2]= txt2.Text;
ds.Tables[0].Rows[e.Item.ItemIndex][3]= txt3.Text;
ds.Tables[0].Rows[e.Item.ItemIndex][4]= txt4.Text;
ds.Tables[0].Rows[e.Item.ItemIndex][5]= txt5.Text;
ds.Tables[0].Rows[e.Item.ItemIndex].EndEdit();

 

OleDbCommandBuilder oleCmdBuild = new OleDbCommandBuilder(oleAdap);
oleAdap.Update(ds);

 

myGrid.EditItemIndex = -1;
myGrid.DataBind();
}

18)  DataGrid imizin DeleteCommand Event i içersine aşağıdaki kodu girelim.

private void myGrid_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
ds.Tables[0].Rows[e.Item.ItemIndex].Delete();

OleDbCommandBuilder oleCmdBuild = new OleDbCommandBuilder(oleAdap);
oleAdap.Update(ds);
myGrid.DataBind();
}

19) Son olarakta, DataGrid imizi sayfalı bir şekilde listelersek çok daha kullanışlı olacaktır. Bunun için yine, DataGrid imizin properties penceresinden Propetry Builder i açıp Paging sekmesine gelelim.
Burdan Allow Paging ChckBox ını işaretlemeniz, sayfalama yapmak için yeterli olacaktır. İsteseniz diğer ayrıntıları da düzenleyebilirsiniz.
Her sayfada kaç kayıt listelenmesi gerektiğini; Page Size ile
Sayfa Numaralarının yerini; Position ile
Sayfa Numarası veya ileri geri ok ile mi gösterileceğini; Mode ile
ve dahasını istediğiniz gibi gerçekleştirebilirsiniz.

20) Sayfalama işlemi için gerekli olan kodu da DataGrid imizin PageIndexChanged eventi altına yazmamız gerekmektedir.

private void myGrid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
myGrid.CurrentPageIndex = e.NewPageIndex;
myGrid.DataBind();
}


21) Ayrıca, tasarım konusunda daha detaylı özelliklere yine Property Builder sayesinde ulaşabilrsiniz.
 

Gördüğünüz gibi çok da fazla kod yazmadan, ASP ile saatlerce sürebilecek bir uygulamayı çok kısa bir zaman dilimi içersinde hallettik. DataGrid kullanımı konusunda tasarımı da güzel yatığınız taktirde, çok kullanışlı bir raporlama sistemi yapmak hiçde zor olmayacaktır.

Projenin Kaynak kodunu ve ilgili Veritabanı dosyasını aşağıdaki linkte bulabilirsiniz.

Lütfen veritabanın bulunduğu klasöre yazma yetkisi vermeyi unutmayınız :)


Sorularınız için bana ulaşabilirsiniz...

Herkeze çalışmalarında başarılar dilerim.



turkmcsd .NET WindRacer = (C#)Özcan İLHAN;
WindRacer.Email = "turkmcsd@hotmail.com";
WindRacer.WWW = "http://www.turkmcsd.net";

 

| Ana Sayfa | Dersler | Download | Forum |Bize Ulaşın  |Siteni Ekle | Ziyaretçi Defteri |

Türk MCSD.NET © 2005
 Siteyi en kaliteli Internet Explorer 5 ve üzeri versiyonlarinda 800 x 600 pixel çözünürlükte izlemenizi tavsiye ederiz..