В настоящее время я работаю над приложением, отображающим данные, которые я запрашиваю из базы данных в DataGrid.
Поскольку столбцы таблицы не известны заранее, я не смог реализовать DataGrid какObservableCollection объектов, и DataGrid, следовательно, привязывается к DataTable:
MyDataGrid.ItemsSource = _myDataTable.DefaultView;
Пользователи должны иметь возможность редактировать данные непосредственно в DataGrid, а отредактированные ячейки должны быть выделены.
Вна данный момент единственный прогресс, который мне удалось сделать в этом вопросе, - это использование события CellEditEnding
для изменения цвета ячейки:
private void MyDataGrid_OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (e.EditAction == DataGridEditAction.Commit)
{
DataGridCell gridCell = null;
if (sender is DataGrid dg)
{
gridCell = GetCell(dg.CurrentCell);
}
if (gridCell != null)
gridCell.Foreground = Brushes.Red;
}
}
public DataGridCell GetCell(DataGridCellInfo dataGridCellInfo)
{
if (!dataGridCellInfo.IsValid)
{
return null;
}
var cellContent = dataGridCellInfo.Column.GetCellContent(dataGridCellInfo.Item);
return (DataGridCell) cellContent?.Parent;
}
Этот подход хорошо работает, если пользователь редактирует ячейку с помощьюдважды щелкните по нему, изменив значение и нажав клавишу ввода, чтобы зафиксировать изменения.
Однако произойдет сбой, если пользователь отредактирует ячейку и завершит редактирование, щелкнув новую строку.В этом случае новая ячейка будет окрашена, а не отредактирована, что имеет смысл, так как dg.CurrentCell
оценивает новую выбранную ячейку.
Возможные причины приводят к цвету отредактированной ячейки, а не новой выделенной ячейки.?
Знаете ли вы о лучшем подходе для выделения отредактированных ячеек из DataGrid, связанного с DataTable?