Как программно определить, находится ли DataForm в режиме редактирования - PullRequest
0 голосов
/ 04 октября 2010

Я использую DataForm в Silverlight 4. На самом деле несколько DataForms, и они имеют общий контекст служб RIA.Вот проблема у меня ...

Если я начну редактировать DataField в одной из форм данных, а затем нажмите на кнопку, которая вызывает Context.SubmitChanges (), я получаю следующую ошибку:

�Entity 'foo' is currently being edited and has uncommitted changes. 
  A call to BeginEdit must be followed by a call to EndEdit or CancelEdit 
  before changes can be submitted.� 

Обратите внимание, что кнопка «Отправить изменения» является внешней по отношению к формам данных и применяется к контексту служб RIA, который используется совместно для форм данных (каждая из которых находится на отдельных вкладках элемента управления вкладками).

Я бы хотел избежать этой проблемы, обнаруживая в коде, когда DataForm находится в режиме редактирования.Когда я нахожусь в режиме отладки, я вижу, что DataForm имеет свойства, такие как IsEditing и CanCancelEdit, которые указывают, что он находится в режиме редактирования, но эти свойства, по-видимому, недоступны для использования в моем коде.

Есть идеи?

Ответы [ 5 ]

3 голосов
/ 14 ноября 2012

Я использовал метод CommitEdit в своей сетке данных (должен быть таким же в DataForm), прежде чем вызывать SubmitChanges (), чтобы исправить проблему с одним вкладышем.

myDataGrid.CommitEdit(DataGridEditingUnit.Row, true);
3 голосов
/ 07 октября 2010

Вы можете вызвать DataForm.CommitEdit () перед вызовом DomainContext.SubmitChanges () и полностью избежать ошибки.

1 голос
/ 05 октября 2010

Я не уверен, что такое IsEditing и CanCancelEdit, они не задокументированы.

Однако существует свойство Mode, которое имеет перечисление DataFormMode, ReadOnly, Edit и AddNew. Существует также свойство IsItemChanged, которое указывает, были ли внесены какие-либо реальные изменения, и редактирование началось.

0 голосов
/ 04 октября 2011

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

        bool editresult = true;
        this.FindChildrenByType<DataGrid>().ToList().ForEach(grid =>
        {
            editresult = editresult && grid.CommitEdit(DataGridEditingUnit.Row, true) && grid.IsValid;
        });

        if (!editresult)
        {
            _messager.Alert("There is a problem with one of the items shown on the screen. This will usually be highlighted in red.\r\nPlease correct the item(s) and try saving again.");
        }
        else
        {
            // Save changes
        }

DataGrid.CommitEdit (DataGridEditingUnit.Row, true) сообщает сетке данных о фиксации строки, последнее логическое значение указывает сетке выйти из режима редактирования. Это вернет true или false в зависимости от того, должна ли строка выйти из режима редактирования. Обычно в сетке, где вы редактируете строку и есть ошибки проверки, сетка не позволит вам выйти из режима редактирования, щелкнув другой элемент, но этот вызов позволит выйти, но вернет false. DataGrid.IsValid проверяет все элементы в сетке, чтобы убедиться, что они действительны.

0 голосов
/ 06 октября 2010

Поскольку ни одно из доступных свойств не предоставило нужную мне информацию, я закончил тем, что создал свое собственное личное поле (в UserControl, которое содержит DataForm) с именем _isEditing, которое инициализировано как «false». В обработчике событий DataForm.BeginningEdit я установил для него значение "true", а в обработчике событий DataForm.EditEnded я установил для него значение "false". Затем я создал общедоступное свойство только для чтения с именем IsEditing, чтобы сделать это значение доступным извне.

...