После ввода значения в строку AddNewRecord и щелчка в любом месте за пределами строки в XamDataGrid кажется, что строка добавляется в коллекцию.
Как предотвратить добавление новой строки в коллекцию при щелчке мышью.
Любезно любая помощь
После ввода значения в строку AddNewRecord и щелчка в любом месте за пределами строки в XamDataGrid кажется, что строка добавляется в коллекцию.
Как предотвратить добавление новой строки в коллекцию при щелчке мышью.
Любезно любая помощь
Щелчок за пределами AddNewRecord завершает режим редактирования записи, и если были изменения, они фиксируются в это время, что означает добавление новой записи. Если вы хотели разрешить фиксацию записи только при нажатии клавиши ввода, а не путем щелчка по другой записи в сетке, то вы могли бы использовать следующую логику, чтобы установить левую кнопку мыши нажатой как обрабатываемую:
private bool editingAddNewRecord = false;
void XamDataGrid1_EditModeEnded(object sender, Infragistics.Windows.DataPresenter.Events.EditModeEndedEventArgs e)
{
this.editingAddNewRecord = false;
}
void XamDataGrid1_EditModeStarted(object sender, Infragistics.Windows.DataPresenter.Events.EditModeStartedEventArgs e)
{
this.editingAddNewRecord = e.Cell.Record.IsAddRecord;
}
void XamDataGrid1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (editingAddNewRecord)
{
DataRecordPresenter drp = Infragistics.Windows.Utilities.GetAncestorFromType(e.OriginalSource as DependencyObject, typeof(DataRecordPresenter), true) as DataRecordPresenter;
if (!(drp != null && drp.IsAddRecord))
{
e.Handled = true;
}
}
}
Спасибо за ответ @alhalama!
Я заметил, что вы не нажимаете правую кнопку мыши, и даже когда мы это делаем, ваше решение не поддерживает его. Кроме того, с вашим решением я не мог редактировать какие-либо другие ячейки, пока я не нажал Enter или Escape в записи «Добавить новую строку» (что может быть тем, чего хотят некоторые люди, но не я). Вот мое модифицированное решение, которое отменяет изменения в ячейке строки Добавить новую запись, когда пользователь щелкает из нее, которое также обрабатывает все щелчки мыши (левый, правый, средний и т. Д.).
// Used to record when the user is editing a value in the Mass Edit row.
private DataRecord _addRecordCellBeingEdited = null;
private void XamDataGrid1_EditModeStarted(object sender, Infragistics.Windows.DataPresenter.Events.EditModeStartedEventArgs e)
{
if (e.Cell.Record.IsAddRecord)
_addRecordCellBeingEdited = e.Cell.Record;
}
private void XamDataGrid1_EditModeEnded(object sender, Infragistics.Windows.DataPresenter.Events.EditModeEndedEventArgs e)
{
_addRecordCellBeingEdited = null;
}
private void XamDataGrid1_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (_addRecordCellBeingEdited != null)
{
DataRecordPresenter drp = Infragistics.Windows.Utilities.GetAncestorFromType(e.OriginalSource as DependencyObject, typeof(DataRecordPresenter), true) as DataRecordPresenter;
if (!(drp != null && drp.IsAddRecord))
{
_addRecordCellBeingEdited.CancelUpdate();
}
}
}