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?

Saif Khan
fuente
1
Esto se relaciona con: stackoverflow.com/questions/983716/…
mcfea

Respuestas:

274

Después de su enlace de datos:

drpList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
drpList.SelectedIndex = 0;
JasonS
fuente
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>
ayhtut
fuente
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

Batidor
fuente
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();
}
Andy McCluggage
fuente
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"


fuente
5

Haga su enlace de datos y luego agregue lo siguiente:

Dim liFirst As New ListItem("", "")
drpList.Items.Insert(0, liFirst)
Dillie-O
fuente
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

Steven A. Lowe
fuente
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, "");
Umesh
fuente
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)

Chưa biết
fuente
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
CINCHAPPS
fuente
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