22 Kasım 2011 Salı

GridView İçindeki Kontrollere Erişmek

Gridview içindeki kontrollere erişmek için son birkaç gündür baya bir uğraştım ve en sonunda bir yolunu buldum. Aslında birkaç yöntem var : 
1. yöntem : 
Gridview1.controls[0].controls[0].FindControl("Bulmak istediğiniz kontrolün adı")
Örneğin :
TextBox textbox1 = (TextBox)Gridview1.controls[0].controls[0].FindControl("textbox1");
veya doğrudan özelliğe de erişmek mümkün
( (TextBox)Gridview1.controls[0].controls[0].FindControl("textbox1")).Text = "bla bla";
2. yöntem : 
GridView1.Rows[index].Findcontrol("Erişmek istediğiniz kontrol adı");
index : ilgili index değeri. Mesela eklemek istiyorsanız eklemek istediğiniz satırın index değeri. Denemek için 0 değerini verebilirsiniz. Örneğin :
TextBox textbox1 = (TextBox)GridView1.Rows[0].Findcontrol("textbox1");


Güncelleme işlemi yaparken şöyle bir ifade işinize yarayabilir:


GridView1.Rows[GridView1.EditIndex].Findcontrol("Erişmek istediğiniz kontrol adı"); 
FindControl metodu genellikle bir GridView kontrolü içine template olarak başka bir kontrol eklediğimizde işimize yarıyor. Dışarıdan GridView içine yerleştirdiğimiz bu kontrollere erişemiyoruz doğrudan.

Bu işlemleri yaparken

Object reference not set to an instance of an object

gibi bir hata mesajıyla karşılaşabiliyoruz. Bu mesaj bize nesnemize erişilemediğini söylüyor.


  • Eğer GridView kontrolümüzün başlığına erişmek istiyorsak :
GridView.HeaderRow.FindControl("Erişmek istediğiniz kontrolün adı")


diyerek ulaşabiliriz.



  • Eğer tablodaki herhangi bir kayıdın adına ulaşmak istiyorsanız :
foreach (GridViewRow row in GridViewRol.Rows)
                {
                    TableCell cell = row.Cells[1];
                    Label lbl = (Label)cell.Controls[1];                
                }
Biz burada GridView içerisindeki bütün kayıtlara sırayla ulaşıyoruz. Burada 1 nolu hücreye ulaşıyoruz. Hücreler 0 nolu indexten başlar. (en soldaki 0) lbl.Text diyerek istediğini veriye ulaşabilirsiniz.