AddNewRecord XamDataGrid

После ввода значения в строку AddNewRecord и щелчка в любом месте за пределами строки в XamDataGrid кажется, что строка добавляется в коллекцию.

Как предотвратить добавление новой строки в коллекцию при щелчке мышью.

Любезно любая помощь


person user977606    schedule 27.11.2012    source источник
comment
Любые гуру инфрагистики, поделитесь, пожалуйста, своими мыслями   -  person user977606    schedule 28.11.2012
comment
Я хотел бы добавить новую строку, только щелкнув значок + для AddNewRecord   -  person user977606    schedule 28.11.2012
comment
Я был бы искренне признателен, если бы мне кто-нибудь помог с этим   -  person user977606    schedule 28.11.2012


Ответы (2)


Щелчок за пределами 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;
        }
    }           
}
person alhalama    schedule 31.12.2012

Спасибо за ответ @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();
        }
    }  
}
person deadlydog    schedule 05.02.2014