2010-03-24 4 views
0

Retirer mes cheveux. J'ai une table 'Belts' avec les colonnes 'BeltID' et 'BeltColor'. J'ai une classe générée Linq to SQL, et j'essaie de remplir une combobox et cela ne fonctionne que partiellement. Voici ce que j'ai jusqu'à présent:WPF, Linq to SQL, C#> Comment remplir et enregistrer une zone de liste déroulante

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    using (DojoDataClassesDataContext conn = new DojoDataClassesDataContext()) 
    { 
     var belts = (from b in conn.Belts 
        select b); 

     cboBelt.DisplayMemberPath = "BeltColor"; 
     cboBelt.SelectedValuePath = "BeltID"; 
     cboBelt.ItemsSource = belts; 
    } 
} 

Et le XAML:

<ComboBox Margin="101,0,57,97" Name="cboBelt" DisplayMemberPath="{Binding Path = Belt.BeltColor}" SelectedValuePath="{Binding Path = Belt.BeltID}" Height="23" VerticalAlignment="Bottom" /> 

Et bien sûr, il y a toute autogenerated Linq pour farcir SQL dans DojoDataClassesDataContext que je faisais les données de zone de texte contraignant sans aucun problème (enfin, mis à part le temps de comprendre tout ça). À l'heure actuelle, la zone de liste déroulante tire le texte: TheNameOfMyProject.Belt comme toutes les options de liste déroulante, mais une fois sélectionné, il montre la bonne couleur de la ceinture en fonction de l'ordre.

+0

Qu'est-ce que vous voyez dans la sortie fenêtre lorsque ce code s'exécute? Y a-t-il des messages d'échec de liaison? –

+0

@Robert: aucun échec de liaison. @Anthony: L'ajout de .ToList() à la fin de la requête provoque l'impression de la requête dans la zone de liste déroulante. Étrange, je sais. Changer l'affichage ne le fait pas. @Jake: Sur le point d'essayer votre solution. – mdvaldosta

+0

Aucun dé Jake, je reçois des erreurs de type d'espace de noms dans le xaml et je ne peux pas le comprendre de cette façon. J'espère qu'il y avait un moyen de modifier ma requête et/ou le code xaml pour le faire fonctionner comme le reste de mon projet est codé dans un style similaire de toute façon. Si je suis obtuse, dis-moi. Je continue d'apprendre. – mdvaldosta

Répondre

1

En supposant que cette fonction:

public IEnumerable<Belt> GetBelts() 
{ 
return /* the belts you want */; 
} 

Mettre cela dans votre Window.Resources:

 <ObjectDataProvider x:Key="BeltObject" 
         MethodName="GetBelts"         
         ObjectType="{x:Type database:Belts}"> 
     </ObjectDataProvider> 

avec:

<ComboBox Margin="101,0,57,97" Name="cboBelt" DisplayMemberPath="BeltColor" SelectedValuePath="BeltID" Height="23" VerticalAlignment="Bottom" ItemsSource="{Binding Source={StaticResource BeltObject}}"/> 

C'est la plus propre façon de le faire avec WPF. Vous rencontrez probablement des problèmes car vos codes DisplayMemberPath et SelectedValuePath sont incorrects. Ils doivent être des valeurs de chaîne représentant les noms de propriété et non des liaisons avec des valeurs de propriété spécifiques.

0

Couple de choses:

regardant votre LINQ to SQL Je ne suis pas posative, mais je pense que vous n'appelez en fait l'essai de requête en ajoutant .ToList à la fin de votre requête .

Essayez de changer votre écran à:

DisplayMemberPath = "{Binding Path = BeltColor}"

SelectedValuePath = "{Binding Path = BeltID}"

Questions connexes