I have a wpf datagrid. I assign ObservableCollection to it.
DG1.DataContext = a;
One of the columns is having values like following
1_A_B
12_A1_B
3_A2_B
10_A3_B
2_A4_B
15_A5_B
i want to sort the datagrid using the first integer value like following
1_A_B
2_A4_B
3_A2_B
10_A3_B
12_A1_B
15_A5_B
If i sort using this column, it is taking as string ascending like following(which is not i want)
1_A_B
10_A3_B
12_A1_B
15_A5_B
2_A4_B
3_A2_B
I want to sort using the first integer value in above column
The values 1_A_B
, 12_A1_B
etc will be contained within the property bound to that column. Let's call this PropertyA
.
Possibly the easiest way to achieve this is to have another property on the data object, let's call that YourSortOrder
. When the setter on PropertyA
gets called with a non null value, you can use simple string manipulation together with an int.Parse() to extract the numeric value and assign it to YourSortOrder
.
This code isn't production quality but illustrates the point:
public string PropertyA
{
get { ... }
set
{
_propertyA = value;
if (value != null)
YourSortOrder = int.Parse(value.Substring(0, value.IndexOf("_", StringComparison.InvariantCultureIgnoreCase)));
}
}
then set the SortMemberPath
of your DataGridColumn to the property YourSortOrder
:
<DataGridColumn x:Name="xxxxx"
SortMemberPath="YourSortOrder"
...etc...