martes, 1 de septiembre de 2009

Ordenar ListItemCollection

Cuando tenemos un control como puede ser un DropDownList ó un ListBox, es posible que necesitemos mostrar los elementos de forma ordenada. Para ello dependiendo de la forma que hayamos cargado el control, la ordenación sera mas o menos sencilla. En el caso de que nuestro control este enlazado a datos, la forma más sencilla seria ordenar los elementos antes de ser enlazados. Existen otros escenarios en los que podemos permitir al usuario manipular esa lista o bien el caso típico que tenemos dos listbox en los que podemos pasar datos de uno al otro. Para esto tendremos que convertir la colección de items a un array y mediante LinQ realizamos la ordenación. La función podria ser la siguiente:
private void OrdenarListBox(ListBox listBoxControl)
{

   //se convierte la coleccion de items a un array
   ListItem[] myListItemArray = new ListItem[listBoxControl.Items.Count];
  lbxRecursosAsignados.Items.CopyTo(myListItemArray, 0);
   //mediante linq se ordena el array por el campo Texto del item
   IEnumerable<ListItem> query = from r in myListItemArray orderby r.Text ascending select r;
   //se enlaza el array al control
   lbxRecursosAsignados.DataSource = query;
   lbxRecursosAsignados.DataBind();
}

No hay comentarios: