Очень часто возникает задача быстрого редактирования данных в списковых представлениях, не открывая детального представления.

При решении данной задачи, я столкнулся с проблемой постоянных запросов о сохранении изменённых данных в списке при переходе к следующей записи.

В моем случае нужно редактировать только одно поле, и постоянный запрос после каждого изменения был не уместен.

Выяснилось, что XAF (13.1.8) предоставляет несколько режимов сохранения данных:

  • Пользователь  вызывает действие «Сохранить».
  • По запросу при переходе к следующей записи или при закрытии формы.
  • Автоматически.
  • Не сохраняет изменения.

Рассмотрим решение задачи:

Всем известно, для того чтобы сделать списковую форму доступной для редактирования,  нужно установить соответствующий признак для списковой формы в модели приложения.

В версии XAF 13.1.8, после того как пользователь отредактирует текущую запись в RootListView (в не вложенной списковой форме)  и перейдет к другой, система  предложит сохранить изменения.

Для того чтобы запрос на сохранение не появлялся каждый раз при переходе на следующую запись, необходимо в контроллере для вашего типа написать следующий  код:

private ModificationsCheckingMode _defaultModificationsCheckingMode;

private ModificationsController _modificationsController;

protected override void OnActivated()

{

    base.OnActivated();

    _modificationsController = this.Frame.GetController<ModificationsController>();

    if (_modificationsController != null)

    {

         _defaultModificationsCheckingMode = _modificationsController.ModificationsCheckingMode;

         _modificationsController.ModificationsCheckingMode = ModificationsCheckingMode.OnCloseOnly;

    }

}

 

protected override void OnDeactivated()

{

      base.OnDeactivated();

      if (_modificationsController != null)

      {

           _modificationsController.ModificationsCheckingMode = _defaultModificationsCheckingMode;

           _modificationsController = null;

     }

}

 

Таким образом, запрос о сохранении изменённых объектов будет появляется только при закрытии вашей списковой формы (в случае если Вы сами не сохраните изменения).

Хотя в документации XAF сказано, что признак ModificationsCheckingMode в контроллере ModificationsController по умолчанию имеет значение  OnCloseOnly.

Возможно, в последней версии XAF так оно и есть, однако в версии XAF 13.1.8 значение по умолчанию для признака ModificationsCheckingMode == Always

https://documentation.devexpress.com/#Xaf/DevExpressExpressAppSystemModuleModificationsController_ModificationsCheckingModetopic

Так же Вы можете установить режим автоматического сохранения или же совсем отключить сохранение, установив соответствующее значение для поля ModificationsHandlingMode контроллера ModificationsController:

http://documentation.devexpress.com/#Xaf/DevExpressExpressAppSystemModuleModificationsController_ModificationsHandlingModetopic