DataGrid ile çalışmak
21.09.2004 02:43
0. Giriş
DataGrid Win32 programcılarının sık kullandıkları bir araçtır, web programcıları için ise yeni bir kavram. Şimdi web ortamında DataGrid ile verileri görüntülemek, düzenlemek ve silme konularını ele alacağız.
Sayfa boyunca çalışacak her fonksiyonun kullacabileceği bir SqlConnection nesnesi tanımlamamız ve bu nesnenin ConnectionString özelliğini sayfa yüklenirken çalışacak olan Page_Load özelliğinde atayacağız.
Page_Load fonksiyonun hemen üzerinde SqlConnection nesnemizi tanımlayalım.
SqlConnection myConn = new SqlConnection();Page_Load fonksiyonu içerisinde ise ConnectionString özelliğini atayalım.
private void Page_Load(object sender, System.EventArgs e) { myConn.ConnectionString = "server=.;uid=sa;password=123;database=pubs"; }
1. Verileri Görüntülemek
Önce DataGrid imizi oluşturalım. Senaryomuz bir SqlServer da bulunan "pubs" database indeki Employee tablosundaki lname ve fname isimli sütünlarını görüntüleyen, güncelleyen ve kaydı silen bir uygulama olacak.
Bunun için ASPX sayfamızda <form> etiketleri arasına aşağdıaki kodu yazalım.
<asp:DataGrid id="dgEmployee" runat="server" AutoGenerateColumns="False"> <Columns> <asp:BoundColumn Visible="False" DataField="emp_id" ReadOnly="True" HeaderText="ID"></asp:BoundColumn> <asp:BoundColumn DataField="lname" HeaderText="Last Name"> </asp:BoundColumn> <asp:BoundColumn DataField="fname" HeaderText="First Name"> </asp:BoundColumn> <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Update" CancelText="Cancel" EditText="Edit"></asp:EditCommandColumn> <asp:ButtonColumn Text="Delete" CommandName="Delete"> </asp:ButtonColumn> </Columns> </asp:DataGrid>
DataGrid kontrolünde verileri görüntülemek için Bir Connection, DataAdapter ve DataSet e ihtiyacımız var. Connection ile veritabanına bağlanacak, DataAdapter ile DataSet i dolduracağız ve son olarak DataGrid kontrolünün DataSource özelliğine DataSet içinde bulunan Table'ın DefaultView özelliğini atayacağız. Son olarak DataGrid kontrolümüzün DataBind metodunu çalıştırarak işlemimizi sonlandıracağız.
Bunun için Doldur isimli bir fonksiyon yazacağız ve gerektiği yerde bu fonksiyonu çağırarak DataGrid imizi dolduracağız.
private void Doldur() { string sql = "Select * From Employee"; SqlDataAdapter myAdp = new SqlDataAdapter(sql,myConn); DataSet myDS = new DataSet(); myAdp.Fill( myDS ); dgEmployee.DataSource = myDS.Tables[0].DefaultView; dgEmployee.DataBind(); }
Sayfamız açılır açılmaz verilerin görüntülenmesi için Page_Load fonksiyonu içerisinde Doldur fonksiyomuzu çalıştıracağız. Yalnız DataGrid içindeki Update komutununu verdiğimizde Update fonksiyonu çalışmadan önce Page_Load fonksiyonu çalışmaktadır. Bu yüzden Page_Load fonksiyonu içinde Doldur fonksiyonunu çağırmadan önce sayfanın PostBack olup olmaığını kontrol edeceğiz. Aksi halde DataGrid içerisinde yaptığımız değişiklikleri yakalayamadan eski verilerle dolacaktır.
private void Page_Load(object sender, System.EventArgs e) { myConn.ConnectionString = "server=.;uid=sa;password=123;database=pubs"; if(!IsPostBack) { Doldur(); } }
2. Verileri Güncellemek
DataGrid de verileri güncellemek için DataGrid imize bir Edit-Update-Cancel kolonu ekledik. Kayıtlar görüntülenirken Edit LinkButton'una tıkladığımızda DataGrid in EditCommand olayı çalışır. Burada DataGrid in Edit moduna girecek satırını bildiriyoruz.
private void dgEmployee_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { dgEmployee.EditItemIndex = e.Item.ItemIndex; Doldur(); }Artık verilerin bulunduğu satır bir TextBox halini alır. Edit kolonu ise Update ve Cancel LinkButton larının bulunduğu bir kolon halini alır.
Edit modundan çıkmak için Cancel LinkButonuna tıklanır. Burada DataGrid in CancelCommand event i çalışacaktır. Burada DataGrid in EditItemIndex özelliğine -1 değerini atarız.
private void dgEmployee_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { dgEmployee.EditItemIndex = -1; Doldur(); }
Update LinkButton una bastığımızda DataGrid in UpdateCommand, Cancel LinkButton una bastığımızda ise CancelCommand eventları çalışır. UpdateCommand olayı icra ettiğinde verilerin yeni hallerini yakalayıp veritabanında gerekli değişiklikleri yapalım.
UpdateCommand eventında iki argüman girer. Biri sender diğer e. Sender event ı gönderendir. Buarada sender Datagrid. e değişkeni ise EventHandler tıklama işlemini yapan satır özelliklerini taşır.
Örneğin LastName edit modundaki TextBox değerien ulaşmak için e.Item.Cells[1].Contols[0] yolunuz kullanırız.Güncellenecek yeni verileri yakaladıktan sonra sql komutunu bir string te oluştururuz. Daha sorna SqlCommand kullanarak bu sql komutunu icra ederiz. Güncelleme işlemi işlemi gerçekleştirken sonra DataGrid in Edit modundan çıkması için DataGrid in EditItemIndex özelliğine -1 değerini atarız. Son olarak Doldur fonksiyonunu çalıştırarak verilerin güncel halini görüntüleriz.
private void dgEmployee_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { string emp_id; string LastName; string FirstName; emp_id = e.Item.Cells[0].Text; LastName = ((TextBox) e.Item.Cells[1].Controls[0]).Text; FirstName = ((TextBox) e.Item.Cells[2].Controls[0]).Text; string sql = "Update Employee Set" +" lname = '" + LastName + "'," + " fname = '" + FirstName + "'" + " Where emp_id = '" + emp_id + "'"; SqlCommand myComm = new SqlCommand(); myComm.Connection = myConn; myComm.CommandText = sql; myConn.Open(); myComm.ExecuteNonQuery(); myConn.Close(); dgEmployee.EditItemIndex = -1; Doldur(); }
private void dgEmployee_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { string emp_id; string LastName; string FirstName; emp_id = e.Item.Cells[0].Text; LastName = ((TextBox) e.Item.Cells[1].Controls[0]).Text; FirstName = ((TextBox) e.Item.Cells[2].Controls[0]).Text; string sql = "Update Employee Set" +" lname = '" + LastName + "'," + " fname = '" + FirstName + "'" + " Where emp_id = '" + emp_id + "'"; SqlCommand myComm = new SqlCommand(); myComm.Connection = myConn; myComm.CommandText = sql; myConn.Open(); myComm.ExecuteNonQuery(); myConn.Close(); dgEmployee.EditItemIndex = -1; Doldur(); }
3. Verileri Silmek
Verileri silmek için DataGrid e Delete kolonu eklemiştik. Delete LinkButton una tıkladığımızda DataGrid in DeleteCommand event i çalışır. Burada silinecek kaydın ID si alınıt ve gerekli sql komutu oluşturularak SqlCommand yardımıyla icra edilir. Nihayetinde Doldur fonksiyonu çalıştırılarak verilerin güncellenmiş hali DataGrid de görüntülenir.
private void dgEmployee_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { string emp_id; emp_id = e.Item.Cells[0].Text; string sql = "Delete From Employee" + " Where emp_id = '" + emp_id + "'"; SqlCommand myComm = new SqlCommand(); myComm.Connection = myConn; myComm.CommandText = sql; myConn.Open(); myComm.ExecuteNonQuery(); myConn.Close(); Doldur(); }
Bu yazı 2394 kere okundu.



