Llenar un DropdownList con Datos ASP.NET C#

En Asp.net llenar un Dropdownlist es un poco distinto a cuando llenamos un Combobox en una aplicación de Windows Form, aunque son muy similares un Combobox tiene distintas funciones y por lo tanto diferentes propiedades, que cambian en un control DropdownList de ASP.NET y es necesario identificar cuales son y cual es la forma correcta de llenar un DropdownList, en este ejemplo lo haremos utilizando no datos estáticos sino que aprenderemos como hacerlos con datos de una consulta en SQL, lo demás a continuación.
Tutorial C#

En el siguiente ejemplo utilizare una consulta ficticia pero fácilmente entendible que podrá ser sustituida por la que necesites sin mayores problemas, el código estará dentro de un Método para que se entienda mejor, veamos el código:
El código es muy simple de entender indicamos la Consulta con un string, y ademas le indicamos la cadena de Conexión con otro string, creamos un SqlDataAdapter y le enviamos como parámetros la cadena de texto de la consulta y la conexión, lo siguiente es crear un Dataset que también puede ser un Datatable depende de como lo quieras utilizar, el método Fill del DataAdapter llena nuestro Dataset y por ultimo solo es cuestión de asignarle los valores a nuestro Dropdownlist los cuales son:

- DataSource , la fuente de datos.
- DataValueField , el valor que tendrá ese campo en especifico es invisible para el usuario final.
- DataTextField , el valor que se mostrara al Usuario final.
- DataBind(), este método enlaza los datos a nuestro dropdownlist si no lo indicamos no se nos reflejara nada.
- Lo ultimo solo es un plus y puedes agregarlo o no y sirve para agregar un Item para que no este precargado ningún dato y especifiques al usuario que debe seleccionar alguno primero.

El Código es muy fácil de entender, espero te sea de utilidad, saludos.

Comentarios

  1. El problema esta es ke cuando kiero escojer una opcion se vuelve a cargar la pagina, y no puedo escoger ninguna opcion, el codigo lo puse en el load

    ResponderEliminar
    Respuestas
    1. como solucioneste ese problema? tengo el mismo y no encuentro por donde, yo tengo una calendatio y una grid y si selecciona alguno de los 2 el combo vuelve y se recarga borrando mi seleccion

      Eliminar
    2. Tienes 2 opciones para resolver esto, una es desabilitar el AutoPostback del control, la otra es en el load agregar una especie de validación como:
      if(!PostBack){ haz esto... así no se cargara con cada load sino solo la primera vez, es cuestión de validaciones y saber un poco como funcionan y trabajan las paginas web, saludos.

      Eliminar
    3. tienes un metodo para cargar el DropDownlist???
      si lo tienes lo que tienes que hacer es en la parte del load realizas una condicion similar a esta:
      if(!IsPostBack){
      metodo();
      }

      esto evita que se pierdan los datos selecionados cuando la pagina vuelva a cargarse

      Eliminar
    4. Tu problema es que estas cargando el control dentro del PageLoag y como estas seleccionando un elemento del DropDownList se activa un evento, entonces tu formulario Web se carga desde el inicio pasando primero por el PageLoad.

      Solución:
      1.- poner condicion if(!IsPostBack)
      {
      Esto indica si es la primera vez que entras a este formWeb pasas y ejecutas el codigo que esta dentro de este if
      }

      Caso contrario salta este if y continua


      Solución 2.- Utiliza UpdatePanel que es una exención de Ajax
      y sirve para que solo se ejecute por decirlo de alguna manera un pedaso de codigo solo lo que esta en el panel en este caso sería tu DropDownList, utilizando este panel y un ScriptManager evitas que se carge de nuevo to FormWeb

      Eliminar
  2. Tienes 2 opciones para resolver esto, una es desabilitar el AutoPostback del control, la otra es en el load agregar una especie de validación como:
    if(!PostBack){ haz esto... así no se cargara con cada load sino solo la primera vez, es cuestión de validaciones y saber un poco como funcionan y trabajan las paginas web, saludos.

    ResponderEliminar
  3. Duda? por que ocupas 2 veces estas lineas si con una basta.
    this.ddZona.DataSource = ds;
    this.ddZona.DataSource = ds;

    ResponderEliminar
  4. ¿Cómo hago para poder cargar en el combo 2 datos, uno que sea el Id de la base de datos y al lado el nombre correspondiente? Es decir:
    1 - Colombia
    2 - Perú
    3 - México
    y así...

    ResponderEliminar
  5. disculpa, como puede obtener el dato seleccionado del ddl. Ya probé con .Text pero me devuelve el id en vez del texto ... de antemano gracias...!

    ResponderEliminar
    Respuestas
    1. En vez de .Text prueba con .Value. Ya después de eso lo conviertes a cadena, a entero, a bool, o lo que sea que necesites en el contexto a usar (Te recomiendo usar Convert.ToInt32( [Ponga su valorcito aquí] ) Convert.ToDecimal( [Ponga su valorcito aquí] ) y así por el estilo, ya que a veces el "casteo" de este tipo (int)[Ponga su valorcito aquí] ó los de ese tipo pues no funcionan bien del todo).

      Saludos.

      Eliminar
  6. NO ME OBTIENE EL VALOR EN LA POSICION 0, LOS DEMAS SI. PERO EL PRIMER DATO DE MI BD NO LO ARROJA, PORQUE? SALUDOS

    ResponderEliminar
  7. Señores tengo una consulta: Tengo un DropDownList que se carga de datos de una consulta sql, la idea es cuando seleccione un dato del dropdownlist consulte el valor en la tabla de bd de dato, si activo el autopostback me vuelve al primer dato de la lista, y me busca en funcion de esa informacion. tengo dos opcion el valor que selecciones se muestre en un textbox, o en un dropdownlinst.
    como puedo hacer para dejar el valor seleccionado del dropdownlist y a la ves haga la consulta a una tabla con el dato seleccionado.
    podrian ayudarme

    ResponderEliminar
  8. ¿El DataValueField puede ser cualquier nombre que yo quiera darle?
    De antemano, gracias.

    ResponderEliminar
    Respuestas
    1. No, en este caso es el ID de tu columna asociado al dato que mostrarás en el DropDownList. Sirve más como referencia para que puedas utilizarlo al momento de sacar el value de dicho componente.

      Eliminar
  9. Que es ConexionBd ??? - ("SELECT * FROM Usuario", ConexionBd);

    Entiendo que es una variable, pero donde se usa, me da error.
    -------------------
    Error 4 The name 'ConexionBd' does not exist in the current context

    ResponderEliminar
    Respuestas
    1. ConexionBd es una variable asignándole la cadena de la base de datos por eso en la sonsulta ("SELECT * FROM Usuario", ConexionBd);
      tiene ConexionBd, ya que le estas especificando que de esa base de datos ara la consulta

      Eliminar
  10. como hacer para q al momento de ejecutar no salga ningun item seleccionado

    ResponderEliminar
    Respuestas
    1. Despues del DataBind(), debes agregar un nuevo item a la lista y seleccionar el value que le agregaste al nuevo item, en el ejemplo que te coloco seria el value 0.

      Dropdownlist1.Items.Insert(0, new ListItem("Seleccione"));
      Dropdownlist1.SelectedValue = 0;

      Espero te sirva.

      Eliminar
    2. Despues del DataBind(), debes agregar un nuevo item a la lista y seleccionar el value que le agregaste al nuevo item, en el ejemplo que te coloco seria el value 0.

      Dropdownlist1.Items.Insert(0, new ListItem("Seleccione"));
      Dropdownlist1.SelectedValue = 0;

      Espero te sirva.

      Eliminar

Publicar un comentario

Entradas populares de este blog

Validar Correo Electronico C#

Añadir Items a un ListBox desde un Control Textbox C#