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?

Saif Khan
quelle
1
Dies bezieht sich auf: stackoverflow.com/questions/983716/…
mcfea

Antworten:

274

Nach Ihrer Datenbindung:

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

Schneebesen
quelle
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();
}
Andy McCluggage
quelle
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"


quelle
5

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

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

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

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