Es gibt gute Antworten hier, aber ich hatte das Bedürfnis, mehr Informationen zu enthalten, da es mehrere Optionen, die arbeiten und wir müssen entscheiden, was zu verwenden ist.
Zuerst sollten wir AppendDataBoundItems
verstehen. Wenn AppendDataBoundItems = "true"
, ListItems
zu DropDownList
hinzugefügt werden, ohne die alten zu löschen. Ansonsten wird die DropDownList
etwa vor der nächsten DataBind
gelöscht. MSDN AppendDataBoundItems doc
Es gibt grundsätzlich 2 durch die meisten Antworten abgedeckt Optionen:
1. Definieren Sie eine leere Option in HTML und fügen Sie die Listitems aus der Datenbank der Dropdown nur einmal.
Hinweis 3 Dinge hier:
- Blank
ListItem
in html definiert ist
AppendDataBoundItems="true"
DataBind
wird NICHT auf Postbacks genannt, oder wenn die DropDownList
Artikel Zählung> 1
Quelle:
<asp:DropDownList ID="MyList" runat="server" AppendDataBoundItems="true" DataValueField="Id" DataTextField="Name" >
<asp:ListItem Text="- Select One -" Value="" />
</asp:DropDownList>
-Code hinter:
protected void Page_Load(object sender, System.EventArgs e)
{
if (MyList.Items.Count <= 1) {
MyList.DataSource = MyDataSource;
MyList.DataBind();
}
}
Hinweis: Ich mag die Logik die Zählerprüfung vs IsPostBack
überprüfen. Obwohl PostBacks oft die Ursache für doppelte Databinding sind, ist es möglich, es auf andere Arten zu verursachen. Wenn Sie die Anzahl der Objekte überprüfen, prüfen Sie einfach, ob sie bereits geladen wurde.
OR (Option IsPostBack
stattdessen verwenden)
protected void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack) {
MyList.DataSource = MyDataSource;
MyList.DataBind();
}
}
2. Klare und die Dropdownlist auf jeder Aktualisierung der Seite neu zu laden.
Hinweis 3 Unterschiede von der ersten Option:
AppendDataBoundItems="false"
(wenn es nicht dann false
definiert ist, es ist Standardwert)
- Blank
ListItem
hinter in Code hinzugefügt wird. Wir können es nicht in html definieren, weil mit AppendDataBoundItems="false"
würde es gelöscht werden.
DataBind
ist auf jeder Page_Load
Quelle:
<asp:DropDownList ID="MyList" runat="server" DataValueField="Id" DataTextField="Name"
OnDataBound="MyList_DataBound" >
</asp:DropDownList>
-Code hinter:
protected void Page_Load(object sender, System.EventArgs e)
{
MyList.DataSource = MyDataSource;
MyList.DataBind();
}
protected void MyList_DataBound(object sender, EventArgs e)
{
MyList.Items.Insert(0, new ListItem("- Select One -", ""));
}
Danke .. !! Es half – msbyuva
Thnx! funktioniert wie ein Zauber – matskn
Bin ich die einzige Person, die ein Problem mit OnDataBound hat, das die Methode findet, zu der Sie sie erklärt haben? Es scheint nicht im hinteren Teil des Codes zu suchen (Trotz der Tatsache, dass die gesamte DropDownList dort gefüllt und erstellt wird.) –