2010-10-29 2 views
0

J'ai une classe d'État défini comme ceci:Liaison d'un Dictionary (Of Integer, String) à la propriété DataTextField d'un DropDownList

Public Class State 
    Public Property StateId As Integer 
    Public Property Name As Dictionary(Of Integer, String) 
End Class 

Nom (x) contient le nom de l'État dans des langues différentes.

Je reçois une collection d'état à partir de la méthode StateManager.GetAllStates() et je veux lier cette collection à un DropDownList. Le problème est que je ne trouve pas comment définir la propriété DataTextField pour dire stateList.Name (1) qui est le nom anglais de mon état.

Dim stateList As StateCollection = StateManager.GetAllStates() 

Me.DataSource = stateList 
Me.DataValueField = "StateId" 
Me.DataTextField = "Name(1).Value" <-- Problem here 
Me.DataBind() 

Quelqu'un a-t-il une idée?

Merci

Répondre

3

Lorsque vous utilisez une source de données, vous ne pouvez pas utiliser des expressions complexes pour spécifier les valeurs.

Créer une source où vous extact les valeurs que vous avez besoin:

Me.DataSource = stateList.Select(_ 
    Function(s as State) New With { .Id = s.StateId, .Name = s.Name(1) } _ 
); 
Me.DataValueField = "Id" 
Me.DataTextField = "Name" 
+0

Fonctionne parfaitement. Merci beaucoup! – Jason

0

Plutôt que "Le nom (1) .Value", avez-vous essayé:

Me.DataTextField = name(1).ToString 
+0

Même problème, DataBinding: « Etat » ne contient pas une propriété avec le nom «Le nom (1). – Jason

+0

Peut-être transtyper la propriété en variable locale Dictionnaire, puis la retirer? Dim myNameDictionary = State.Name Me.DataTextField = myNameDictionary (1) .ToString – ewitkows

+0

Notez que DataTextField est une chaîne nommant la propriété à utiliser à partir de la source de données, pas la valeur elle-même. – Guffa

Questions connexes