Ajouter ListItems à un DropDownList à partir d'une liste générique
J'ai cette aspx-code: (exemple)
<asp:DropDownList runat="server" ID="ddList1"></asp:DropDownList>
Avec ce code:
List<System.Web.UI.WebControls.ListItem> colors = new List<System.Web.UI.WebControls.ListItem>();
colors.Add(new ListItem("Select Value", "0"));
colors.Add(new ListItem("Red", "1"));
colors.Add(new ListItem("Green", "2"));
colors.Add(new ListItem("Blue", "3"));
ddList1.DataSource = colors;
ddList1.DataBind();
La sortie ressemble à ceci:
<select name="ddList1" id="ddList1">
<option value="Select Value">Select Value</option>
<option value="Red">Red</option>
<option value="Green">Green</option>
<option value="Blue">Blue</option>
</select>
Ma question est: Pourquoi mes valeurs (nombres) disparaissent et que le texte utilisé comme valeur ET le texte? Je sais que cela fonctionne si j'utilise le ddList1.Items.Add(New ListItem("text", "value"))
méthode, mais j'ai besoin d'utiliser une liste générique comme source de données pour d'autres raisons.
source d'informationauteur Espo
Vous devez vous connecter pour publier un commentaire.
Parce que la méthode DataBind lie les valeurs que si DataValueField propriété est définie. Si vous définissez DataValueField à la propriété "Valeur" avant d'appeler DataBind, vos valeurs apparaissent sur le balisage.
Mise à JOUR: Vous aurez également besoin de définir des propriétés de datatextfield à la propriété "Texte". C'est parce que la liaison de données et en ajoutant manuellement les éléments ne fonctionnent pas de la même manière. La liaison de données ne connaît pas l'existence de type ListItem et génère le balisage en évaluant les éléments de la source de données.
Et voici la méthode qui effectue la liaison de données. Vous pouvez voir exactement ce qui se passe:
Si vous êtes à la construction ListItems, vous n'avez pas besoin d'utiliser DataBind() en premier lieu.
Simplement les ajouter à votre DropDownList:
DataBind() est utile lorsque vous disposez déjà d'une collection/dataobject (généralement un DataTable ou DataView) qui peut être utilisé comme source de données, en définissant les propriétés de datatextfield et DataValueField (comme buyutec écrit).
"Si vous construisez ListItems, vous n'avez pas besoin d'utiliser DataBind() en premier lieu."
De l'ajouter directement à la dropdownlist est le moyen le plus facile (et donné l'exemple de code celui de droite), mais disons que vous avez un non-ordonnée de la source de données et que vous voulez les éléments de la liste triée.
Un moyen d'y parvenir serait de créer une liste générique de ListItem puis utilisez les hérité de la méthode de tri avant de liaison de données pour la liste.
Il y a beaucoup de wys à la peau d'un chat...