sábado, agosto 02, 2008

ASP.NET: Ubicar un control dentro de un FormView

Una de las cosas mas frustrantes de ASP.NET es el hecho de no poder acceder directamente a objetos que estan contenidos dentro de otros objetos contenedores tales como FormView, MultiView, etc.

Para estos casos, se puede obtener una referencia a estos objetos contenidos utilizando el metodo FindControl() del objeto contenedor:

LinkButton myLink = FormView1.Row.FindControl("lnkGrabar");

Pero, como es comun en ASP.NET, esto no funciona en todos los casos. Por alguna razon, el método FindControl() parece solo funcionar sobre los objetos ubicados en el ItemTemplate del FormView, asi que si intentamos encontrar un objeto ubicado en otro template, digamos EditItemTemplate, terminamos con un mensaje como este:

System.NullReferenceException: Object reference not set to an instance of an object

La solucion (al menos para algunos casos)? usar el evento PreRender del objeto que deseamos accesar. Este evento recibe como primer parametro una referencia al objeto, por lo que podemos hacer cosas como esta:

((LinkButton)sender).Attributes.Add("onclick","....");

No es perfecto, pero al menos soluciona en ciertos casos.

Mas informacion aqui.