Asp.net - Agregue un elemento en blanco en la parte superior de la lista desplegable


128

¿Por qué el menú desplegable no muestra mi elemento en blanco primero? Esto es lo que tengo

drpList.Items.Add(New ListItem("", ""))

With drpList
    .DataSource = myController.GetList(userid)
    .DataTextField = "Name"
    .DataValueField = "ID"
    .DataBind()
End With

Editar ~ Me estoy vinculando a una Lista Generig, ¿podría ser este el culpable?


1

Respuestas:


274

Después de su enlace de datos:

drpList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
drpList.SelectedIndex = 0;

Alternativamente, puede crear una instancia de ListItem, establecer su propiedad Selected en true y luego insertarla en drpList como se indicó anteriormente.
skia.heliou

3
Esto puede ayudar a aquellos que buscan una respuesta para trabajar con datos de sqlDataSource. En mi caso, también tuve que agregar drpList.AppendDataBoundItems = true; vincularlo a los datos actuales en el método
Page_Load

29

Puede usar AppendDataBoundItems=truepara agregar fácilmente:

<asp:DropDownList ID="drpList" AppendDataBoundItems="true" runat="server"><br/>
    <asp:ListItem Text="" Value="" /><br/>
</asp:DropDownList>

1
A VS no le gusta la etiqueta <br /> y funciona para mí sin ella. Esta es una opción tan limpia, no sé por qué no tiene más votos.
Tony L.

Trabajado como un encanto. Gracias por la solución de tiempo de diseño.
DataCat Robin

3
No olvide configurar Selected = "true"
Fandango68

24

El enlace de datos se lleva a cabo después de que haya agregado su elemento de lista en blanco, y reemplaza lo que ya está allí, debe agregar el elemento en blanco al comienzo de la Lista desde su controlador, o agregarlo después del enlace de datos.

EDITAR:

Después de buscar en Google rápidamente a partir de ASP.Net 2.0, hay una propiedad verdadera "AppendDataBoundItems" que puede configurar para ... agregar los elementos enlazados a datos.

para detalles ver

http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=281 o

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.appenddatabounditems.aspx


44
Una cosa que debe tener en cuenta es que su lista desplegable crezca después de cada devolución de datos agregando los mismos datos una y otra vez.
Keith Sirmons el

¿El elemento en blanco no está allí o no está seleccionado?
Batir el

Esto funcionaría si tuviera uno en blanco en su marcado .aspx, luego encuadernado en el código detrás.
John Sheehan

13

Creo que una mejor manera es insertar primero el elemento en blanco, luego vincular los datos tal como lo ha estado haciendo. Sin embargo, debe establecer la AppendDataBoundItemspropiedad del control de lista.

Utilizamos el siguiente método para vincular cualquier fuente de datos a cualquier control de lista ...

public static void BindList(ListControl list, IEnumerable datasource, string valueName, string textName)
{
    list.Items.Clear();
    list.Items.Add("", "");
    list.AppendDataBoundItems = true;
    list.DataValueField = valueName;
    list.DataTextField = textName;
    list.DataSource = datasource;
    list.DataBind();
}

7

Al igual que "Whisk" dijo, el truco está en la propiedad "AppendDataBoundItems"

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DropDownList1.AppendDataBoundItems = true;
        DropDownList1.Items.Insert(0, new ListItem(String.Empty, String.Empty));
        DropDownList1.SelectedIndex = 0;
    }
}

Gracias "batir"


5

Haga su enlace de datos y luego agregue lo siguiente:

Dim liFirst As New ListItem("", "")
drpList.Items.Insert(0, liFirst)

3

parece que está agregando un elemento en blanco y luego un enlace de datos, lo que vaciaría la lista; intente insertar el elemento en blanco después del enlace de datos


cuando hago eso, la fila en blanco aparece en la parte inferior.
Saif Khan

Puede especificar el índice para insertar. Mira la solución de JasonS.
AndyG

@ [Saif Khan]: y si eso no funciona, inserte la fila en blanco en su fuente de datos, luego enlace de datos
Steven A. Lowe

3

sencillo

Al final

ddlProducer.Items.Insert(0, "");

1

ddlCategory.DataSource = ds;
ddlCategory.DataTextField = "CatName";
ddlCategory.DataValueField = "CatID";

Cách 1:

ddlCategory.Items.Add(new ListItem("--please select--", "-1"));
ddlCategory.AppendDataBoundItems = true;
ddlCategory.SelectedIndex = -1;

ddlCategory.DataBind();

Cách 2:

ddlCategory.Items.Insert(0, new ListItem("-- please select --", "0"));

(Probado bien)


0

También podría tener una unión de la selección en blanco con la selección que tiene contenido:

select '' value, '' name
union
select value, name from mytable

Mirando hacia atrás, no recomendaría este método, excepto solo como una alternativa. Me gusta el evento por motivos de flexibilidad (OnDataBound = "mydropdown_DataBound"), pero en mi caso actual, estoy adoptando el (AppendDataBoundItems = "true") por motivos de simplicidad.
CINCHAPPS
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.