martes, 20 de enero de 2009

Control Extensions

Continuando con los mini-aportes sobre extensions methods, en esta oportunidad quiero compartir algunos que simplifican la carga de datos en controles de lista como DropDownList, CheckBoxList o RadioButtonList.

El código habitual para llenar una lista desplegable con datos obtenidos desde algún origen de datos es el siguiente:

var countries = GlobalServices.GetCountries();
CountryDropDownList.DataValueField = "Id";
CountryDropDownList.DataTextField = "Name";
CountryDropDownList.DataSource = countries;
CountryDropDownList.DataBind();

Habitualmente solemos agregar un item más al principio que diga, por ejemplo: (Seleccione). Entonces, al código anterior podemos agregar:

CountryDropDownList.Items.Insert(0, new ListItem("(Seleccione)", String.Empty)); 

Si bien esto no es muy complejo, se vuelve tedioso cuando hay que repetirlo para llenar otras listas adicionales. Un simple extension method puede reducir todo esto a solo 1 línea de código:

CountryDropDownList.Fill(countries, "Id", "Name");

Si quisieramos agregar el item adicional de (Seleccione), podríamos usar una sobrecarga de este método:

CountryDropDownList.Fill(countries, "Id", "Name", "(Seleccione)");

El código del extension method Fill() es muy simple:

public static void Fill(this ListControl list, object dataSource, string valueField, string textField) 
{
if (list == null) return;

list.DataValueField = valueField;
list.DataTextField = textField;
list.DataSource = dataSource;
list.DataBind();
}

Como se puede observar, el extension method se aplica a los controles de tipo ListControl, esto incluye, además del control DropDownList, los controles CheckBoxList, RadioButtonList, BulletedList, y cualquier otro control que herede de ListControl.

Es un pequeño aporte que puede reducir, de una forma sencilla y elegante, una cantidad considerable de código y el consecuente ahorro de tiempo.

Pueden descargar la clase ControlExtensions.cs con estos métodos desde el siguiente link. Más adelante intentaré agregar nuevos métodos aplicables a otros controles.

Espero que sirva.

Saludos, Gus

No hay comentarios: