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.
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