2008-11-05 11 views
118

¿Por qué el menú desplegable no muestra primero mi elemento en blanco? Esto es lo que tengoAsp.net - Agregue el elemento en blanco en la parte superior de la lista desplegable

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

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

Editar ~ Estoy vinculado a una lista de Generig, ¿podría esto ser el culpable?

+1

Esto se relaciona con: http://stackoverflow.com/questions/983716/asp-net-dropdownlist-add-blank-line-before-db-values ​​ – mcfea

Respuesta

248

Después de su databind:

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

Como alternativa, puede crear una instancia de ListItem, establecer su propiedad Selected en true y luego insertarlo en drpList como se indica anteriormente. –

+3

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

3

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

+0

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

+0

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

+0

@ [Saif Khan]: y si eso no funciona, inserte la fila en blanco en su fuente de datos, luego databind –

24

El enlace de datos se lleva a cabo después de agregar el elemento de la lista en blanco y reemplaza lo que ya hay, debe agregar el elemento en blanco al comienzo de la lista desde su controlador o agréguelo después del enlace de datos.

EDIT:

Tras Google tan rápidamente como de ASP.Net 2.0 hay un "AppendDataBoundItems" verdadera propiedad que se puede establecer a ... añadir los elementos de enlace de datos.

para más detalles véase

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

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

+0

Intenté configurar esto como verdadero, pero no funciona. –

+3

Uno que debe tener en cuenta es hacer que su lista desplegable crezca después de cada devolución agregando los mismos datos una y otra vez. –

+0

¿El elemento en blanco no está allí, o allí, pero simplemente no está seleccionado? – Whisk

5

Haga su enlace de datos y, a continuación, agregue el siguiente:

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

Creo que una mejor manera es insertar el elemento en blanco primero, luego vincular los datos tal como lo ha estado haciendo. Sin embargo, debe establecer la propiedad AppendDataBoundItems 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(); 
} 
+0

Lo siento por el código C# a una pregunta VB –

+0

Este me funcionó. ¡Gracias! – Cesar

6

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

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 "Bata"

3

simples

al fin

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

Puedes usar AppendDataBoundItems=true para agregar fácilmente:

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

VS no le gusta la etiqueta
y funciona sin mi. Esta es una opción tan limpia, no sé por qué no tiene más votos. –

+0

Funcionó como un encanto. Gracias por la solución de tiempo de diseño. –

+0

No olvide establecer Selected = "true" – Fandango68

1

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

CACH 1:

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

ddlCategory.DataBind();

CACH 2:

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

(Probado OK)

0

Usted podría también tener una unión del selecto en blanco con la selección que tiene contenido:

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

Mirando hacia atrás, no recomendaría este método, excepto como alternativa.Me gusta el evento por sake de flexibilidad (OnDataBound = "mydropdown_DataBound"), pero en mi caso actual, estoy adoptando el (AppendDataBoundItems = "true") por razones de simplicidad. – CINCHAPPS

Cuestiones relacionadas