Greetings
I have a xamgrid in which I would like to always have the last column sorted in descending order. the data changes quite frequently but I want those changes to be reflected in the grid when they do change. How do I make it so that the last column is always sorted? I thought I needed to use the issorted property but it looks like not.
<ig:XamGrid x:Name="SideGrid" Grid.Row="2" Grid.ColumnSpan="2" ItemsSource="{Binding}" AutoGenerateColumns="False" > <ig:XamGrid.Columns> <!--<ig:TextColumn HeaderText="Bus Rank"/>--> <ig:TextColumn HeaderText="Number" Key="Number" Width="90" IsSortable="False"/> <ig:TextColumn HeaderText="Load" Key="Load" Width="*" IsSorted="Descending"/> </ig:XamGrid.Columns> <ig:XamGrid.SortingSettings> <ig:SortingSettings ShowSortIndicator="False"/> </ig:XamGrid.SortingSettings>
Hello Matthew,
I am just checking if you have any other questions regarding the sorting functionality of XamDataGrid.
Matthew,
Thank you for the details you have provided information. I understand that you are changing values of the existing data items not adding new ones. The sorting is applied when the grid loads and default sorting description is added or when user interact sort it using the SortIndicator. It does not re-sort when data item is changed because it is not notified that it have to. You could sort a column at runtime by setting the IsSorted property after data is modified. Please note that if the SortDirection is already set the same value e.g. Descending, you should first change it to None or Ascending and then to Descending. Here is a code snippet that demonstrates how this could be achieved on button click:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
DataUtil.Products.ElementAt(5).ProductID = -29;
TextColumn customSortColumn = xamGrid1.Columns[0] as TextColumn;
customSortColumn.IsSorted = SortDirection.None;
customSortColumn.IsSorted = SortDirection.Descending;
}
I hope this will help you.
Your example worked on my end indeed. However, I think my problem stems from the fact that I'm not adding new items to the grid like you are doing. I have the same items in the grid but I'm updating them at the rate of around every 16.7 milliseconds. So as the grid works now I can see all the items being updated. They just need to resort themselves every time the items change. Does that make sense?
Thank you for posting!
I made a sample project where I set the IsSorted property of the TextColumn to Descending. When new record is added using the AddNewRecord functionality or new data item is added to the source collection using the top button, a row is added in the correct position respecting the sorting of the ProductID column. Could you try to run the attached project and let me know if it works as expected on your side? Do the data changes take effect on the grid so that new rows are added when you run your project? If not, you might want to check whether the xamGrid is notified for these changes by implementing INotifyPropertyChage interface.