Is there a way to sort a WPF DataGrid programmaticaly ( for example, like if i clicked on my first column).
Is there a way to simuate this click ? Or a best way ?
Here is my code :
Collection_Evenements = new ObservableCollection<Evenement>();
Collection_Evenements = myEvenement.GetEvenementsForCliCode(App.obj_myClient.m_strCode);
Collection_Evenements.CollectionChanged += Collection_Evenements_CollectionChanged;
myDataGridEvenements.ItemsSource = Collection_Evenements;
System.Data.DataView dv = (System.Data.DataView)myDataGridEvenements.ItemsSource;
dv.Sort = "strEvtType";
myDataGridEvenements.Focus();
myDataGridEvenements.SelectedIndex = 0;
myDataGridEvenements.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
I don't know why, but the line "dv.Sort = "strEvtType";" cause a strange thing, my Window Show up and the programme don't continue to execute the next lines, nevertheless i don't see the sort !
Thanks a lot,
Best regards,
Nixeus
voo's solution was not working for me, ItemsSource
was null, most likely because it was not directly set, but bound.
All other solutions I found here at StackOverflow were dealing with sorting the Model only, but the DataGrid
header was not reflecting to the sort.
Here's a proper solution based on the incomplete script here: http://dotnetgui.blogspot.co.uk/2011/02/how-to-properly-sort-on-wpf-datagrid.html
public static void SortDataGrid(DataGrid dataGrid, int columnIndex = 0, ListSortDirection sortDirection = ListSortDirection.Ascending)
{
var column = dataGrid.Columns[columnIndex];
// Clear current sort descriptions
dataGrid.Items.SortDescriptions.Clear();
// Add the new sort description
dataGrid.Items.SortDescriptions.Add(new SortDescription(column.SortMemberPath, sortDirection));
// Apply sort
foreach (var col in dataGrid.Columns)
{
col.SortDirection = null;
}
column.SortDirection = sortDirection;
// Refresh items to display sort
dataGrid.Items.Refresh();
}
In case of your code, it can be used like this:
SortDataGrid(myDataGridEvenements, 0, ListSortDirection.Ascending);
Or by using the default parameter values, simply:
SortDataGrid(myDataGridEvenements);