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:
Publicar un comentario