Il y a de bonnes réponses ici, mais je ressentais le besoin d'inclure plus d'informations, car il y a plusieurs options travailler et nous devons décider lequel utiliser. D'abord, nous devrions comprendre AppendDataBoundItems
. Si AppendDataBoundItems = "true"
, ListItems
sont ajoutés au DropDownList
sans effacer les anciens. Sinon, le DropDownList
est effacé avant le prochain DataBind
. MSDN AppendDataBoundItems doc
Il y a essentiellement 2 options couvertes par la plupart des réponses:
1. Définir une option vide en html et ajoutez les ListItems de la base de données à la DropDownList une seule fois.
Avis 3 choses ici:
- Blank
ListItem
est défini dans HTML
AppendDataBoundItems="true"
DataBind
est pas appelé sur postbacks ou lorsque le nombre DropDownList
élément est> 1
Source:
<asp:DropDownList ID="MyList" runat="server" AppendDataBoundItems="true" DataValueField="Id" DataTextField="Name" >
<asp:ListItem Text="- Select One -" Value="" />
</asp:DropDownList>
code derrière:
protected void Page_Load(object sender, System.EventArgs e)
{
if (MyList.Items.Count <= 1) {
MyList.DataSource = MyDataSource;
MyList.DataBind();
}
}
Note: J'aime la logique de vérifier le décompte vs vérification IsPostBack
. Bien que PostBacks soit souvent la cause d'une liaison de données en double, il est possible de le provoquer d'autres manières. La vérification du nombre d'éléments consiste simplement à vérifier si elle a déjà été chargée.
OU (possibilité d'utiliser à la place IsPostBack
)
protected void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack) {
MyList.DataSource = MyDataSource;
MyList.DataBind();
}
}
2. Effacer et recharger la DropDownList sur chaque actualisation de la page.
3 avis différences de la première option:
AppendDataBoundItems="false"
(si elle n'est pas défini alors false
est c'est valeur par défaut)
- Blank est
ListItem
est ajouté dans le code derrière. Nous ne pouvons pas le définir en html car avec AppendDataBoundItems="false"
, il serait effacé.
DataBind
est appelé à chaque Page_Load
Source:
<asp:DropDownList ID="MyList" runat="server" DataValueField="Id" DataTextField="Name"
OnDataBound="MyList_DataBound" >
</asp:DropDownList>
code
derrière:
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 -", ""));
}
Merci .. !! Il a aidé – msbyuva
Thnx! fonctionne comme un charme – matskn
Suis-je la seule personne a un problème avec OnDataBound trouver la méthode que vous l'avez déclaré à utiliser? Il ne semble pas regarder dans la fin arrière du code (Malgré le fait que l'ensemble DropDownList est peuplé et créé là.) –