2009-03-24 8 views
0

J'ai réussi à mettre en place un WPF DataGrid avec le March 2009 WPF Toolkit, a créé des classes LINQ to SQL de la base de données Northwind, liés au réseau WPF avec ce code:Comment autoriser l'utilisateur à trier des colonnes sur une base de données LINQ-to-SQL WPF?

var customers = from c in _db.Customers 
       select c; 
TheDataGrid.ItemsSource = customers; 

Je peux déplacer les colonnes de gauche à droite, Cependant, lorsque je clique sur un en-tête de colonne pour le trier, j'obtiens environ 20 paires d'erreurs dans ma fenêtre Sortie, il semble qu'il y ait une paire d'erreurs pour chaque colonne :

System.Windows.Data Error: 1 : Cannot create default converter to perform 'two-way' conversions between types 'System.Data.Linq.EntitySet`1[TestDataGrid566.Model.Order]' and 'System.String'. Consider using Converter property of Binding. BindingExpression:Path=Orders; DataItem='Customer' (HashCode=4925117); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='System.Data.Linq.EntitySet`1[TestDataGrid566.Model.Order]' BindingExpression:Path=Orders; DataItem='Customer' (HashCode=4925117); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

Lorsque j'ai créé les classes LINQ-to-SQL, j'ai simplement déplacé toutes les tables de la base de données vers le concepteur de modèle et les ai enregistrées, de sorte que les classes sont toutes du code par défaut.

Quelles sont ces erreurs me disons? Est-ce que je n'ai pas simplement configuré correctement les classes LINQ-to-SQL ou est-ce que cela pointe vers quelque chose de plus profond?

Répondre

4

Je pense que vous devriez transformer votre requête en liste.

var customers = from c in _db.Customers 
       select c; 
TheDataGrid.ItemsSource = customers.ToList(); //note the .ToList() call 

Sinon, le DataGrid tente de réénumérer la requête, ce qui est une mauvaise idée car un résultat de la requête est une collection chargée paresseux.

+0

Je reçois toujours les erreurs mais au moins le .ToList() lui permet de trier, merci. –

+0

Si je lis correctement le message d'erreur, c'est un problème dans la liaison. Par exemple, vos classes Linq2Sql sont probablement configurées correctement (on dirait que vous avez une entité 'Customer' qui a une propriété 'Orders', qui est une collection d'entités Order) mais que vous essayez de lier cette collection à - suite – Razzie

+0

Propriété TextBlock Text, ce qu'elle ne peut pas faire, vous donnant ainsi ces avertissements. Je regarderais ça. – Razzie

Questions connexes