Datagrid dans WPF - 1 colonne par défaut triés
En WPF, j'ai un DataGrid avec un peu de colonnes.
À défaut, il est de 1 je veux faire en sorte, mais je ne peux pas trouver comment je peux le faire.
La grille de données dans le code XAML ressemble à ceci:
<DataGrid x:Name="LibraryView" ItemsSource="{Binding Path=Elements[Persons]}" IsReadOnly="True" LoadingRow="dg_LoadingRow">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Element[Name].Value}" IsReadOnly="True" />
<DataGridTextColumn Header="Score" Binding="{Binding Path=Element[Score].Value}" IsReadOnly="True" />
<DataGridTextColumn Header="Date" Binding="{Binding Path=Element[Date].Value}" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
Et le seul code derrière, c'est:
public ScoreBoard()
{
InitializeComponent();
DataSet ds = dweMethods.DecryptAndDeserialize("ScoreData.xml");
XElement TrackList = XElement.Parse(ds.GetXml());
LibraryView.DataContext = TrackList;
}
Ce que je juste ne pouvez pas trouver est de savoir comment rendre par défaut triés sur le "Score" de la colonne.
Quelqu'un peut m'aider de me pointer dans la bonne direction ?
- jetez un oeil à l'objet collectionviewsource.
- J'ai déjà essayé ceci:
ICollectionView view = CollectionViewSource.GetDefaultView(dataGrid1.ItemsSource); view.SortDescriptions.Clear(); view.SortDescriptions.Add(new SortDescription("LastName", ListSortDirection.Ascending)); view.Refresh();
Mais cela ne semble pas fonctionner avec mon code ci-dessus, je ne sais pas et ne comprends pas ce que je dois faire pour le faire fonctionner - avez-vous envisager de tri de la liste des Pistes les enfants?
- uuh, bien problème est, im seulement 3 semaines de profondeur en c# pour le moment hehe, donc j'ai encore besoin d'apprendre des choses aussi. Alors peut-être que je n'ai pas mis en place le contrôle datagrid dans le droit chemin pour être en mesure d'utiliser le tri maintenant ?
- ne Darjan la solution de travail? Tri XElement est assez trivial - avoir un regard sur XLINQ de Tri.
Vous devez vous connecter pour publier un commentaire.
EDIT: Cela peut être dû à des changements dans la spécification. Cette réponse est basée sur l'utilisation .NET 4.0, je n'ai pas recherché si cette solution fonctionne dans les anciennes versions du framework.
Compte tenu de cette XAML
Tout ce que vous devez faire est de choisir une colonne et spécifier un sens de tri pour cette colonne.
Ce sera, par défaut, le tri de la colonne 2 dans le sens ascendant.
DataGridTextColumn
utilise unMultiBinding
, même avec unSortMemberPath
ensemble. Cliquant sur l'en-tête de colonne pour trier, maisSortDirection
ne le fait pas.J'ai décrit comment trier dans le code en premier des colonnes ici: Initiale De La Grille De Données De Tri
Vous pourriez adapter le code de trier par votre colonne désirée, bien que l'ensemble de la démarche semble en désordre.
Si vous voulez le faire dans le code XAML ... ce qui fait en paramètre objet collectionviewsource.SortDescriptions:
Mais je n'ai jamais essayé le dernier.
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
Si vous voulez le faire par programmation, vous pouvez le faire comme ceci:
Vous pouvez utiliser un
ICollectionView
dans votre code derrière.En supposant que vous avez défini
ObservableCollection<yourPersonClass> Persons
etNames
est une propriété de yourPersonClass