Background:
By default, when changes are made to a sorted column resorting is done automatically in C1DataGrid. However in MS-Excel, resorting is not done, so the grid does not sort for modified values. Therefore, how to achieve excel like sorting in C1DataGrid.
Steps to Complete:
1. Handle grid’s BeganEdit event. Inside access the editor and further handle an editor’s event that triggers when its Value change (like ValueChanged event of C1NumericBox).
private void _grid_BeganEdit(object sender, DataGridBeganEditEventArgs e)
{
if (_grid.DataSourceView.SortDescriptions.Count != 0)
{
// do similarly for other columns editing element as well
if (e.EditingElement.GetType() == typeof(C1NumericBox))
{
(e.EditingElement as C1NumericBox).ValueChanged += Editor_ValueChanged;
}
}
}
2. Use editor’s event to store the rows in the order they appear in the grid.
ObservableCollection<Employee> dataCollection;
private void Editor_ValueChanged(object sender, PropertyChangedEventArgs<double> e)
{
dataCollection = new ObservableCollection<Employee>();
foreach (DataGridRow row in _grid.Rows)
{
if (row.Type != DataGridRowType.New)
{
dataCollection.Add((Employee)row.DataItem);
}
}
}
3. Store the rows back in the grid after editing is done. C1DataGrid’s CommittedEdit event can be used for this purpose.
private void dataGrid_CommittedEdit(object sender, DataGridCellEventArgs e)
{
if(dataCollection!=null)
{
dataGrid.ItemsSource = null;
dataGrid.ItemsSource = dataCollection;
}
}
Ruchir Agarwal