Asp.net - Leeres Element oben in der Dropdown-Liste hinzufügen


128

Warum wird in der Dropdown-Liste nicht zuerst mein leeres Element angezeigt? Hier ist was ich habe

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

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

Bearbeiten ~ Ich bin an eine allgemeine Liste gebunden. Könnte dies der Schuldige sein?


1

Antworten:


274

Nach Ihrer Datenbindung:

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

Alternativ können Sie ein ListItem instanziieren, seine Selected-Eigenschaft auf true setzen und es dann wie oben in drpList einfügen.
skia.heliou

3
Dies kann denjenigen helfen, die nach einer Antwort suchen, um mit sqlDataSource-Daten zu arbeiten. In meinem Fall musste ich auch drpList.AppendDataBoundItems = true hinzufügen. um es an die aktuellen Daten in der Page Load-Methode zu binden
Sabastienfyrre

29

Sie können verwenden, AppendDataBoundItems=trueum einfach hinzuzufügen:

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

1
VS mag das <br /> -Tag nicht und es funktioniert für mich ohne es. Dies ist eine so saubere Option, ich weiß nicht, warum es nicht mehr Stimmen gibt.
Tony L.

Lief wie am Schnürchen. Vielen Dank für die Entwurfszeitlösung.
DataCat Robin

3
Vergessen Sie nicht, Selected = "true"
Fandango68

24

Die Datenbindung erfolgt nach dem Hinzufügen Ihres leeren Listenelements und ersetzt das bereits vorhandene. Sie müssen das leere Element von Ihrem Controller an den Anfang der Liste hinzufügen oder es nach der Datenbindung hinzufügen.

BEARBEITEN:

Nachdem Sie dies ab ASP.Net 2.0 schnell gegoogelt haben, gibt es eine wahre Eigenschaft "AppendDataBoundItems", die Sie festlegen können, um ... die datengebundenen Elemente anzuhängen.

Details siehe

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

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


4
Ein Gedanke, auf den Sie achten müssen, ist, dass Ihre Dropdown-Liste nach jedem Postback wächst, indem Sie dieselben Daten immer wieder anhängen.
Keith Sirmons

Ist das leere Element nicht vorhanden oder nur ausgewählt?
Whisk

Dies würde funktionieren, wenn Sie das leere in Ihrem ASPX-Markup hätten und dann im Code dahinter gebunden wären.
John Sheehan

13

Ich denke, ein besserer Weg ist es, zuerst das leere Element einzufügen und dann die Daten so zu binden, wie Sie es getan haben. Sie müssen jedoch die AppendDataBoundItemsEigenschaft des Listensteuerelements festlegen .

Wir verwenden die folgende Methode, um eine Datenquelle an ein Listensteuerelement zu binden ...

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

Wie bei "Whisk" Said liegt der Trick in der Eigenschaft "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;
    }
}

Danke "Schneebesen"


5

Führen Sie Ihre Datenbindung durch und fügen Sie dann Folgendes hinzu:

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

3

Es sieht so aus, als würden Sie ein leeres Element und dann eine Datenbindung hinzufügen, wodurch die Liste leer würde. Versuchen Sie, das leere Element nach der Datenbindung einzufügen


Wenn ich das mache, erscheint die leere Zeile unten.
Saif Khan

Sie können den Index angeben, in den eingefügt werden soll. Schauen Sie sich die Lösung von JasonS an.
AndyG

@ [Saif Khan]: und wenn das nicht funktioniert, fügen Sie die leere Zeile in Ihre Datenquelle ein, dann Datenbindung
Steven A. Lowe

3

einfach

zu guter Letzt

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"));

(Getestet OK)


0

Sie können auch eine Vereinigung der leeren Auswahl mit der Auswahl mit Inhalt haben:

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

Rückblickend würde ich diese Methode nur als Alternative empfehlen. Ich mag das Ereignis aus Gründen der Flexibilität (OnDataBound = "mydropdown_DataBound"), aber in meinem aktuellen Fall übernehme ich der Einfachheit halber das (AppendDataBoundItems = "true").
CINCHAPPS
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.