Saltar al contenido

DropDownList AppendDataBoundItems (primer elemento en blanco y sin duplicados)

Posterior a buscar en diversos repositorios y foros de internet al final hallamos la resolución que te mostramos más adelante.

Solución:

En lugar de usar AppendDataboundItems='true' (que causará el problema del que está hablando), responda a la DataBound evento para el DropDownList y luego agregue su elemento “en blanco” al principio de la lista.


Luego, en su código detrás:

protected void MyListDataBound(object sender, EventArgs e)

    MyList.Items.Insert(0, new ListItem("- Select -", ""));

Aquí hay buenas respuestas, pero sentí la necesidad de incluir más información porque hay múltiples opciones que funcionan y debemos decidir cuál usar.

Primero, debemos entender AppendDataBoundItems. Si AppendDataBoundItems = "true", ListItems se agregan a la DropDownList sin limpiar los viejos. De lo contrario, el DropDownList se aclara antes del próximo DataBind. Documento MSDN AppendDataBoundItems

Hay básicamente 2 opciones cubiertas por la mayoría de las respuestas:

1. Defina una opción en blanco en html y agregue ListItems de la base de datos a DropDownList solo una vez.

Note 3 cosas aquí:

  • Espacio en blanco ListItem se define en html
  • AppendDataBoundItems="true"
  • DataBind NO se llama en devoluciones de datos o cuando el DropDownList el recuento de elementos es > 1

Fuente:


    

Código detrás:

protected void Page_Load(object sender, System.EventArgs e)

    if (MyList.Items.Count <= 1 ) 
        MyList.DataSource = MyDataSource;
        MyList.DataBind();
    

Nota: me gusta la lógica de verificar el conteo frente a verificar IsPostBack. Aunque los PostBack son a menudo la causa del enlace de datos duplicado, es posible causarlo de otras maneras. Verificar el conteo de elementos es básicamente solo verificar si ya se cargó.

O (opción de usar IsPostBack en cambio)

protected void Page_Load(object sender, System.EventArgs e)

    if (!IsPostBack) 
        MyList.DataSource = MyDataSource;
        MyList.DataBind();
    

2. Borre y vuelva a cargar DropDownList en cada actualización de página.

Note 3 diferencias con la primera opción:

  • AppendDataBoundItems="false" (si no está definido entonces false es su valor predeterminado)
  • Espacio en blanco ListItem se agrega en el código detrás. No podemos definirlo en html porque con AppendDataBoundItems="false"se borraría.
  • DataBind se llama cada Page_Load

Fuente:



Código detrás:

protected void Page_Load(object sender, System.EventArgs e)

    MyList.DataSource = MyDataSource;
    MyList.DataBind();


protected void MyList_DataBound(object sender, EventArgs e)

    MyList.Items.Insert(0, new ListItem("- Select One -", ""));

Probablemente vincules esa DropDownList en el código subyacente. Por lo tanto, no debe volver a hacerlo después de la devolución de datos:

// probably in Page_Load method
if (!Page.IsPostBack)

    // do data binding here
;

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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