Publicidad

Cargar DropDownList y ListBox genéricos


Por Alex el 24/07/2008 , Comentar el artículo

Comparte este artículo:        




Cuando en una aplicación tenemos muchos combos y/o listbox lo más óptimo y cómodo es crearse una función genérica con la que podamos cargarlos con unas pocas líneas de código.


La función podría ser como esta:

Recibe como parámetros:
  • el DataTable con los datos a cargar en el combo,
  • elementoVacio, True, no inserta elemento vacio, false inserta elemento vacio.
  • Los valores del campo value y text del DropDownList.
  • El DropDownList que se va a rellenar

    public static void LoadCombo(DataTable dt, bool elementoVacio, string[] KeyValue, DropDownList dp) {

    Limpiamos el DropDownList de posibles datos anteriores.

    dp.Items.Clear();

    Asignamos el dataset al DropDownList

    dp.DataSource = dt;

    Asignamos los elementos value y texto

    dp.DataTextField = KeyValue[1];
    dp.DataValueField = KeyValue[0];
    dp.DataBind();

    Si hay que añadir un texto

    if (!elementoVacio) {
      dp.Items.Add(new ListItem ("Seleccionar una opción", "0"));
      dp.SelectedValue = "0";
    }

    El código para cargar un listbox es igual al anterior.

    public static void LoadListBox(DataTable dt, string[] KeyValue, ListBox lbx) {

      lbx.Items.Clear();
      lbx.DataSource = dt;
      lbx.DataTextField = KeyValue[1];
      lbx.DataValueField = KeyValue[0];
      lbx.DataBind();

    }

    Para probar los métodos utilizaremos el siguiente ejemplo:

    Creamos una stored procedure en la base de datos pubs:

    ALTER PROCEDURE llenarCombos
    AS
    BEGIN
      SET NOCOUNT ON;

      -- Listado de autores
      Select au_id, au_lname From authors Order by au_lname

      -- Listado de trabajos
      Select job_id, job_desc From jobs order by job_desc

      -- Listado de titulos
      Select title_id, title From titles order by title

      -- Listado almacenes
      Select stor_id, stor_name From stores order by stor_name
    END
    GO

    Y en una página aspx añadimos tres DropDownList y ListBox.

    Conectamos con la base de datos y ejecutamos la stored procedure:

    MSSQL.Connection("");
    DataSet ds = MSSQL.ExecuteDataset(CommandType.StoredProcedure, "llenarCombos");
    MSSQL.Close();

    Para conectar a la base de datos he usado la librería que explico en este artículo.

    Y rellenamos los DropDownList y ListBox

    //Llenamos los combos con los datos del stored procedure
    string[] ValoresCombo = new string[2] {"au_id", "au_lname"};
    ComboGenerico.LoadCombo(ds.Tables[0], false, ValoresCombo, dp1);

    ValoresCombo = new string[2] { "job_id", "job_desc" };
    ComboGenerico.LoadCombo(ds.Tables[1], true, ValoresCombo, dp2);

    ValoresCombo = new string[2] { "title_id", "title" };
    ComboGenerico.LoadCombo(ds.Tables[2], false, ValoresCombo, dp3);

    ValoresCombo = new string[2] { "stor_id", "stor_name" };
    ComboGenerico.LoadListBox(ds.Tables[3], ValoresCombo, lb1);

    Y con esto tenemos todos los combos llenos con una stored procedure y con las funciones comunes.

    Enlaces relacionadas:

    Código de ejemplo 

    Y esto es todo!!!
    Saludos
    Alex


    Si te ha gustado el artículo compartelo en:        


    Publicidad

    También puede interesarte:

    Instalar .NET Core en Ubuntu

    Instalar .NET Core en Ubuntu

    Por Alex, el 07/02/2020

    Limpiar datos de un combobox en winforms.

    Limpiar datos de un combobox en winforms.

    Por Alex, el 23/03/2010

    Crear, copiar y borrar bases de datos SQL Server desde c#.

    Crear, copiar y borrar bases de datos SQL Server desde c#.

    Por Alex, el 07/03/2010

    Escribir en un excel desde c#.

    Escribir en un excel desde c#.

    Por Alex, el 04/03/2010

    Llenar un Repeater o DataList con un DataTable.

    Llenar un Repeater o DataList con un DataTable.

    Por Alex, el 29/12/2008

    El evento SelectedIndexChanged no funciona

    El evento SelectedIndexChanged no funciona

    Por Alex, el 26/12/2008


    Añadir un comentarios:

    Nombre:
    Email: (no se publica el email)




  • SIGUENOS EN

    ARCHIVO

    Publicidad

    .