2010-02-27 7 views
2

J'ai une liste déroulante qui remplit à partir de la base de données du serveur SQL. le remplissage de la liste n'est pas un problème, mais quelqu'un sait-il comment remplir la partie valeur de la listitem.populating liste déroulante dans vb.net

<asp:dropdownlist id="colors"> 
<listitem value="1">black</listitem> 
<listitem value="2">blue</listitem> 
<listitem value="3">orange</listitem> 
<listitem value="4">red</listitem> 
<listitem value="5">violet</listitem> 

comment avez-vous la peuplent valeur = 1,2,3,4,5 lorsque vous peuplant de la table dans la base de données?

+0

Duplicata de http://stackoverflow.com/questions/409648/dropdownlist-datatextfield-composed-from-properties – casperOne

+1

Comment est-ce dupliqué? parce qu'il s'agit de dropdowns ??? – ugio

+1

@casperOne, je ne suis pas d'accord, ce n'est pas un doublon. pour commencer, il pose des questions sur VB et non sur C#, en second lieu, vous donnez l'exemple de DataTextField à partir de propriétés, où la question de @ ugio concerne l'obtention de DataValueField à partir d'une base de données. –

Répondre

1

D'abord, vous devez construire votre instruction select

Select [ID], [Value] From [Table] 

Vous stocker votre requête dans une variable (je l'utilise « r » pour le retour) Ensuite, vous devez joindre à la liste déroulante

DropDownList1.DataTextField = r.Value 
DropDownList1.DataValueField = r.ID 
DropDownList1.Databind() 

Si vous avez vraiment besoin vraiment faire une boucle, essayez quelque chose le long de ces lignes (pas de code est décochée, juste une idée générale.)

For Each o as object in r 
    DropDownList1.Items.Insert(o.ID,new ListItem(o.Value,o.ID)) 
Next 

Ou avec le DataReader (encore une fois, non testé, mais prolly proche)

While DataReader.Read() 
    DropDownList1.Items.Insert(datareader("value"),new ListItem(datareader("name"),datareader("value")) 
End While 
+0

cela fonctionnera-t-il dans une boucle? J'ai sql datareader avec une boucle while. c'est le code actuel - sql = "sélectionnez l'identifiant, les couleurs de tbl_colors" ... dropdownlist1.items.add = datareader ("colors" & "") fin tandis que – ugio

+0

Je ne recommanderais PAS de boucler si vous ne le faites pas devoir. Databind est plus efficace. –

+0

Eh bien, j'ai de nombreux enregistrements qui proviennent de la base de données en fonction de la requête sql, donc je pensais boucler avec dans un lecteur de données était la bonne chose à faire. Alors, n'y a-t-il pas d'autre solution que de changer le code, ou puis-je travailler avec ma boucle existante? – ugio

0

En supposant que vous avez une implémentation IList que vous liez les objets de données (vous semblent avoir les résultats matérialisés dans quelque chose déjà, comme vous dites que vous pouvez remplir le texte), ce que vous devez faire est de spécifier le nom de la propriété/membre sur vos instances retournées à partir de votre implémentation IList. Donc, en supposant que vous ayez un DataTable avec des colonnes d'ID et de Value, ou un IList d'objets qui a été rempli de LINQ-to-SQL/Entities, chacun avec une propriété ID et une propriété Value, vous le feriez :

DropDownList1.DataValueField = "ID" 
DropDownList1.DataTextField = "Value" 

Vous devez le mettre aux noms des champs, par opposition aux valeurs, comme le mécanisme de liaison utilise le cadre de descripteur de propriété pour savoir comment associer ces chaînes aux propriétés/colonnes contenir les données.