Question

Lorsque je charge pour la première fois des données dans un contrôle Silverlight DataGrid, comment puis-je donner à l'écran un aspect identique à celui que l'utilisateur venait de cliquer sur l'en-tête de la première colonne? En d'autres termes, les données doivent être triées par ordre croissant en fonction des valeurs de cette colonne ET la petite flèche de tri doit être affichée dans l'en-tête de la première colonne.

En supposant que ce soit possible, puis-je également donner l'impression que l'utilisateur a cliqué sur la première colonne puis sur la seconde en maintenant la touche Maj enfoncée? En d’autres termes, puis-je appliquer par programme un tri en deux parties et donner l’écran comme si l’utilisateur l’avait déjà fait?

Était-ce utile?

La solution

J'avais besoin de faire cela aussi, et j'ai cherché sérieusement à savoir si le DataGrid pouvait le faire.

Il existe en fait une méthode appropriée sur la classe DataGridColumnHeader, à savoir InvokeProcessSort, mais elle est interne et n'apparaît nulle part ailleurs dans les classes DataGrid.

Tout ce que j'ai pu faire, c'est de pré-trier les données juste avant de les lier. J'utilise une collection de données personnalisée qui implémente ICollectionView ainsi que ObservableCollection & Lt; & Gt ;, et cela fonctionne correctement - mais ce n'est pas optimal et une charge de travail inutile.

De plus, fournir une collection pré-triée signifie que la grille ne montre pas le marqueur de tri.

Je soulèverai ce problème en tant que problème dans l'outil de suivi des bogues de DataGrid. Il s'agit d'une omission assez importante et assez facile à corriger. MS doit simplement exposer les méthodes appropriées sur les classes DataGridColumn et DataGrid.

Autres conseils

C’était ma solution:

if (pcv.CanSort == true)
{
      pcv.SortDescriptions.Add(new SortDescription("ProductionStatus", ListSortDirection.Ascending));
      pcv.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending));
}

, où pcv est un PageCollectionView. Cela trie d’abord par propriété ProductionStatus, puis par Date propriété. La petite flèche de tri ne s'affiche que pour la deuxième colonne.

Nous avons trouvé un bon petit article de Paul Sherrif qui résout ce problème pour nous ...

http: // blogs. asp.net/psheriff/archive/2010/07/14/use-collectionviewsource-in-silverlight.aspx

De manière générale, nous lions de toute façon le DataGrid à un CollectionViewSource. Il se trouve que cela a un ensemble de config CollectionViewSource.SortDescriptions qui nous permet de spécifier l’ordre de tri par défaut.

Merci Paul!

Ajoutez simplement un SortDescriptor au DomainDataSource:

<riaControls:DomainDataSource.SortDescriptors>
    <riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" />
</riaControls:DomainDataSource.SortDescriptors>

Il existe un CollectionViewSource dans Silverlight 3 +

http: / /msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(v=vs.95).aspx

Il existe un moyen simple de définir en XAML l'ordre de tri par défaut, comme suggéré par Microsoft:

Déclarez le tri dans le balisage à l'aide de CollectionViewSource

 <Window.Resources>
   <app:MyData x:Key="MyData"/>
   <CollectionViewSource x:Key="cvs" Source={StaticResource MyData}>
     <CollectionViewSource.SortDescriptions>
        <SortDescription Property="Name"/>
     </CollectionViewSource.SortDescriptions>
   </CollectionViewSource>
 </Window.Resources>

 <DataGrid ItemsSource="{Binding Source={StaticResource cvs}}"/> 

trouvé dans les commentaires de https: //connect.microsoft.com/VisualStudio/feedback/details/678782/set-default-sort-order-of-datagrid

Correction d'un correctif à l'exemple de Microsoft:

 <sort:SortDescription 
   PropertyName="Name"
   Direction="Ascending"
   xmlns:sort="clr-namespace:System.ComponentModel;assembly=System.Windows"
   /> 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top