[Linq] Obtener los Radiobuttons a partir de su GroupName

Hoy en la mañana cuando llegue a la oficina y empecé a revisar los foros, me encontré con una pregunta curiosa (“Obtener todos los Radiobuttons a partir del GroupName“)… entonces pensé, – este hombre necesita saber el poder de Linq, así que le respondí de la siguiente forma.

En un escenario como el siguiente, una página web con seis Radiobuttons, separados en dos grupos de tres (“Grupo1” y “Grupo2”) y un botón que desencadena la acción.

Teniendo claro esto, manos al teclado Lo primero para poder trabajar con Linq (en este caso) es tener una colección IEnumerable del tipo RadioButton que contendrá todos los controles de este tipo, así:

IEnumerable<RadioButton> allRadios = Page.Form.Controls.OfType<RadioButton>();

Como vemos en la anterior línea de código accedemos a los controles del Form de la página y acudimos al método extensor OfType siendo T la clase por la que debemos “filtrar”. Como el extensor OfType retorna un IEnumarable (no un ControlCollection) ya tenemos acceso a todo el poder de Linq.

Ahora nos queda filtrar por el nombre de grupo, para esto he creado una función llamada getByGroupName, así:

private IEnumerable<RadioButton> getByGroupName(IEnumerable<RadioButton> allRadios, string groupName)
{
        return from radios in allRadios
               where radios.GroupName == groupName
               select radios;
}

De esta forma, haciendo uso de Linq dejamos de usar iteradores y hardcode pues le agregamos un tanto más de dinamismo a este tipo de trabajos.

Pero bueno ¿y si ahora queremos saber cuáles de este grupo están seleccionados o no? Fácil, la respuesta es Linq. Para esto creamos otro método al que llamaremos getAllCheckeds, así:

private IEnumerable<RadioButton> getAllCheckeds(IEnumerable<RadioButton> byGroupname, bool check)
 {
         return from radios in byGroupname
                where radios.Checked == check
                select radios;
 }

De esta forma podemos obtener toda la información que queramos de nuestros controles, haciendo uso de Linq. Finalmente, para el que se le dificulte el entendimiento del código, aquí lo dejo todo (más abajo el link de descarga):

protected void Button1_Click(object sender, EventArgs e)
{
        IEnumerable<RadioButton> allRadios = Page.Form.Controls.OfType<RadioButton>();
        IEnumerable<RadioButton> byGroupname = getByGroupName(allRadios, “Grupo1″);
        IEnumerable<RadioButton> radioCheked = getAllCheckeds(byGroupname, true);      
}

private IEnumerable<RadioButton> getByGroupName(IEnumerable<RadioButton> allRadios, string groupName)
{
        return from radios in allRadios
               where radios.GroupName == groupName
               select radios;
}
private IEnumerable<RadioButton> getAllCheckeds(IEnumerable<RadioButton> byGroupname, bool check)
{
        return from radios in byGroupname
               where radios.Checked == check
               select radios;
}

Descarga el ejemplo.

Espero les sea de utilidad.

Hasta el próximo post.

Anuncios
[Linq] Obtener los Radiobuttons a partir de su GroupName

2 comentarios en “[Linq] Obtener los Radiobuttons a partir de su GroupName

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s