|
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 :)
Kaynak Kod ve Veri Tabanı :
İndirmek İçin Tıklayınız
Sorularınız için bana ulaşabilirsiniz...
Herkeze çalışmalarında başarılar dilerim.
maxiaspNET WindRacer = (C#)Emrah.Cetiner;
WindRacer.Email = "emrahcetiner@maxiasp.net";
WindRacer.WWW = "http://www.insankazani.com"; |