Asp.net: aggiungi un elemento vuoto all'inizio dell'elenco a discesa


128

Perché il menu a discesa non mostra prima il mio elemento vuoto? Ecco quello che ho

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

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

Modifica ~ Sono vincolante per un elenco di generazioni, potrebbe essere questo il colpevole?


1

Risposte:


275

Dopo il tuo database:

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

In alternativa, puoi creare un'istanza di ListItem, impostare la proprietà Selected su true e quindi inserirla in drpList come sopra.
— skia.heliou,

3
Questo può aiutare chi cerca una risposta per lavorare con i dati sqlDataSource Nel mio caso, ho anche dovuto aggiungere drpList.AppendDataBoundItems = true; associarlo ai dati correnti nel metodo Page_Load
— sabastienfyrre,

30

Puoi usare AppendDataBoundItems=trueper aggiungere facilmente:

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

1
A VS non piace il tag <br /> e funziona senza di me. Questa è un'opzione così pulita, non so perché non abbia più voti.
— Tony L.,

Ha funzionato come un fascino. Grazie per la soluzione in fase di progettazione.
— DataCat Robin,

3
Non dimenticare di impostare Selected = "true"
— Fandango68,

24

Il databinding ha luogo dopo aver aggiunto l'elemento vuoto dell'elenco e sostituisce ciò che è già presente, è necessario aggiungere l'elemento vuoto all'inizio dell'elenco dal controller o aggiungerlo dopo il databinding.

MODIFICARE:

Dopo aver cercato su Google rapidamente da ASP.Net 2.0 c'è una vera proprietà "AppendDataBoundItems" che puoi impostare per ... aggiungere gli elementi del database.

per i dettagli vedere

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

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


4
Una cosa che devi fare attenzione è far crescere il tuo elenco a discesa dopo ogni postback aggiungendo sempre gli stessi dati.
— Keith Sirmons,

L'elemento vuoto non è presente o presente ma semplicemente non selezionato?
— Sbatti il

Funzionerebbe se avessi quello vuoto nel tuo markup .aspx, quindi rilegato nel codice dietro.
— John Sheehan,

13

Penso che un modo migliore sia inserire prima l'elemento vuoto, quindi associare i dati proprio come hai fatto tu. Tuttavia, è necessario impostare la AppendDataBoundItemsproprietà del controllo elenco.

Utilizziamo il seguente metodo per associare qualsiasi origine dati a qualsiasi controllo elenco ...

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

Come "Whisk", il trucco sta nella proprietà "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;
    }
}

Grazie "Frusta"


5

Esegui il tuo database e quindi aggiungi quanto segue:

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

3

sembra che tu stia aggiungendo un elemento vuoto e quindi il databinding, che svuoterebbe l'elenco; prova a inserire l'elemento vuoto dopo il databinding


quando lo faccio, la riga vuota appare in fondo.
— Saif Khan,

È possibile specificare l'indice da inserire. Guarda la soluzione di JasonS.
— AndyG,

@ [Saif Khan]: e se non funziona, inserisci la riga vuota nell'origine dati, quindi databind
— Steven A. Lowe

3

semplice

alla fine

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

1

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

Data 1:

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

ddlCategory.DataBind();

Data 2:

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

(Testato OK)


0

Puoi anche avere un'unione della selezione vuota con la selezione che ha contenuto:

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

Guardando indietro, non consiglierei questo metodo se non solo in alternativa. Mi piace l'evento per motivi di flessibilità (OnDataBound = "mydropdown_DataBound"), ma nel mio caso attuale sto adottando (AppendDataBoundItems = "true") per motivi di semplicità.
— CINCHAPPS
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.