2009-02-24 4 views
3

Je dois être capable de charger une page de résultats dans la grille à partir de plusieurs dizaines de milliers de résultats possibles. Je veux obtenir les données dans les pages de cinquante du serveur, en utilisant SQL Server pour trier les données avant de le renvoyer pour la liaison à la grille de données. Lorsque l'utilisateur trie le dta dans la grille de données en cliquant sur un en-tête de colonne, je dois le détecter et déterminer le nouvel ordre avant de revenir à la base de données.Puis-je détecter une colonne DataGrid triée dans Silverlight?

Répondre

0

Je ne pense pas qu'il existe un moyen de demander à la grille de données sur quelle colonne elle est triée. Cependant en regardant http://blogs.msdn.com/scmorris/archive/2008/06/10/sorting-data-in-the-silverlight-datagrid.aspx je vois que vous pouvez implémenter votre propre tri lorsque vous implémentez ICollectionView sur vos articles.

Alors vous pourriez peut-être implémenter ICollectionView sur (un wrapper) vos résultats?

Datagrid le fait en interne si vous définissez ItemSource sur un IList, alors peut-être que vous pouvez jeter un oeil à son implémentation pour voir comment ils l'ont fait? (voir la classe interne Datagrids ListCollectionView utilisant le réflecteur)

Lorsque vous avez un ICollectionView, vous pouvez utiliser SortDescriptions pour connaître le tri actuel.

J'espère que cela vous aide dans la bonne direction?

Tjipke

0

Vous pouvez en utilisant un PagedCollectionView et en jetant la propriété SortDescriptions à un INotifyCollectionChanged. Vous écoutez ensuite l'événement CollectionChanged. Comme ceci:

var collectionView = new PagedCollectionView(items); 
(collectionView.SortDescriptions as INotifyCollectionChanged).CollectionChanged += (object sender, NotifyCollectionChangedEventArgs e) => 
{ 
    // This gets fired multiple times based on the previous sort and new sort 
}; 
dataGrid.ItemsSource = collectionView; 
Questions connexes