El problema de los valores por defecto en listas desplegables de ASP.NET

Se trata este de un truco sencillo, pero aún así interesante ya que mucha gente tarda en darse cuenta de cómo solucionarlo.


El problema surge cuando usas un control DataSource del tipo que sea (ObjectDataSource, SqlDataSource, LinqDataSource, etc…) y lo enlazas con un DropDownList para mostrar una lista de valores para elegir, por ejemplo, la categoría de productos a mostrar en otro control GridView. El origen de datos te devuelve sólo los diferentes valores de categorías disponibles en la base de datos, pero lo habitual es que además de una categoría (o lo que sea) concreta, desees dar una opción o dos por defecto, por ejemplo «Ver todas» y «Ninguna». Pero claro el control de origen de datos no tiene esas categorías inexistentes contempladas, así que ¿cómo haces?


Pues muy fácil, pero hay que saber un truquillo: la propiedad AppendDataBoundItems del control DropDownList.


Si la estableces a True lo que consigues es que cualquier elemento que coloques en lalista en tiempo de diseño se conserve (en los primeros lugares además) aunque le añadas dinámicamente otros en tiempo de ejecución con el control de origen de datos. Así, basta con que añadas un par de elementos como los del ejemplo, según tus necesidades, para tener disponibles más opciones adicionales en la lista desplegable.


Sencillo pero útil 🙂

Sin categoría

2 thoughts on “El problema de los valores por defecto en listas desplegables de ASP.NET

  1. Un truquillo bastante útil. Recordar que además del texto del item, también pueden agregarle un value por defecto para el trabajo en el método o en el SP, dependiendo del caso: «… WHERE cat=@cat OR @cat=0…»

    Saludos,

  2. ¡Muy Interesante José !

    Ademas hay otra opción que me gusta más y es meter un list item en el html en vista diseño asi despues de establecer esa propiedad a true

    Saludos desde la otra punta del pais 🙂

    Sergio

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *