martes, 9 de octubre de 2007

Responder a eventos de CheckBox dentro de controles ASP.NET

Al hilo del comentario de Alex en el artículo anterior, explicaré cómo podemos hacer lo mismo que se explicaba en dicho artículo, si nuestro botón pasa a ser un CheckBox.
La verdad, no conocía la respuesta... Pero ahora ya sí!

Si necesitamos que un GridView contenga un CheckBox y que se realice una acción cada vez que éste se seleccione o se deseleccione, sencillamente tendremos que crear un método que responda a dicha acción y asociar el CheckBox a dicho método.
Por ejemplo:

<asp:TemplateField HeaderText="Total">
<ItemTemplate>
<asp:CheckBox Id="CheckBox1" runat="server" OnCheckedChanged="CheckBox1_CheckedChanged1" AutoPostBack="true"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>


El .cs asociado tendría un método:

protected void CheckBox1_CheckedChanged1(object sender, EventArgs e)
{
//Código asociado
}


Pero, de esta forma no podemos acceder a las propiedades de la fila en la que nos encontramos.

Para ello, tendríamos que añadir unas cositas en el código asociado al CheckBox, de forma que podamos saber en qué fila nos encotramos y, una vez hecho esto, poder acceder a una de las columnas.
El código que habría que incluir en dicho método sería:

protected void CheckBox1_CheckedChanged1(object sender, EventArgs e)
{
CheckBox checkbox = (CheckBox)sender;
GridViewRow row = (GridViewRow)checkbox.NamingContainer;
//Todo lo que queramos hacer aquí
}


Como vemos, lo primero que hacemos es obtener el CheckBox que ha invocado al método.
Una vez lo hemos hecho, podemos conocer el contenedor de dicho objeto, con lo que conoceríamos la fila del GridView que contiene el CheckBox que ha sido seleccionado/deseleccionado y, con ella, todos los valores de sus columnas.

Pero este método no sólo sirve para CheckBoxes. En realidad sirve para cualquier control, por ejemplo un Button.
Es decir, podemos hacer lo mismo que explicamos en el artículo anterior de esta forma.
Lo que tendríamos que hacer es añadir el evento "OnClick" al Button y asociarle el método correspondiente (por ejemplo "Button1_Click") y en dicho método, poner el mismo código que arriba, pero referente a un Button:

protected void button1_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
GridViewRow row = (GridViewRow)button.NamingContainer;
//Código que queramos
}


Espero que os sirva de ayuda!

Saludos!

8 comentarios:

Anónimo dijo...

Muchas gracias, he buscado muchísimo un ejemplo claro que haga esto, y me ha servido a las mil maravillas

Jaume Montesinos dijo...

Me alegro haberte ayudado!

Anónimo dijo...

Yuju!!!!... bien muchas gracias de verdad hay cosas que parecen mas sencillas de lo ke parecen. Gracias me ayudo como no tienes idea!!... Saludos.

Anónimo dijo...

Hola Soy Fabiola... este codigo sirve para los CommandField de tipo Select?

Estrella dijo...

Esto es exactamente lo que necesito hacer pero dentro de un vb, alguin sabe como?

Anónimo dijo...

[B]NZBsRus.com[/B]
Escape Sluggish Downloads Using NZB Files You Can Instantly Find Movies, PC Games, Music, Software and Download Them at Maxed Out Speeds

[URL=http://www.nzbsrus.com][B]NZB[/B][/URL]

Anónimo dijo...

judge up unlock this untrammelled of mandate [url=http://www.casinoapart.com]casino[/url] indemnification at the dissonant [url=http://www.casinoapart.com]online casino[/url] advisor with 10's of added [url=http://www.casinoapart.com]online casinos[/url]. harshly [url=http://www.casinoapart.com/articles/play-roulette.html]roulette[/url], [url=http://www.casinoapart.com/articles/play-slots.html]slots[/url] and [url=http://www.casinoapart.com/articles/play-baccarat.html]baccarat[/url] at this [url=http://www.casinoapart.com/articles/no-deposit-casinos.html]no turn aside from casino[/url] , www.casinoapart.com
the finest [url=http://de.casinoapart.com]casino[/url] to UK, german and all owed the world. so in living soul of the cork [url=http://es.casinoapart.com]casino en linea[/url] discontinuity us now.

Anónimo dijo...

Bad credit cash payday loan a lot all but the kind of a la carte you can anticipate. Provide you with advance loan, that for their an purposes, where as their next payday is yet to come according to one or two week. Quick Swiss bank account can be good, that's can be adventurous for a stranger to borrowers or those having a breath R and D over their cash flow. Dreaming a absorption and accomplishing it your affluence in 60 accounting. [url=http://cleverpaydayloans.co.uk]payday loans with bad credit[/url] If you could not afford acquitment your bills and you don't have money set for emergencies, audaciousness from stress is just an application away.