Поделиться через


Практическое руководство. Фиксация внутрипроцессных изменений в элементах управления с привязкой к данным до сохранения данных

 

Опубликовано: Апрель 2016

При изменении значений в элементе управления с привязкой к данным пользователь должен перейти с текущей записи для фиксации обновленного значения в источнике данных, к которому привязан элемент управления. При перетаскивании элементов из окно "Источники данных" на форму первый перемещенный элемент создает код события нажатия кнопки сохранения элемента BindingNavigator. Этот код вызывает метод EndEdit объекта BindingSource. Таким образом, вызов метода EndEdit генерируется только для первого BindingSource, добавляемого на форму.

Вызов EndEdit сохраняет любые текущие изменения в любом элементе управления с привязкой к данным, который в этот момент редактируется. Таким образом, если элемент управления с привязкой к данным по-прежнему имеет фокус и вы нажмете кнопку Сохранить, все незафиксированные изменения фиксируются до фактического сохранения (метод TableAdapterManager.UpdateAll).

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

Примечание

Конструктор добавляет код BindingSource.EndEdit только для первого элемента, перетащенного на форму. Таким образом, необходимо добавить строку кода для вызова метода EndEdit для каждого BindingSource на форме. Можно вручную добавить строку кода для вызова метода EndEdit для каждого BindingSource. В качестве альтернативы можно добавить в форму метод EndEditOnAllBindingSources и вызывать его перед выполнением сохранения.

В следующем коде используется запрос LINQ (Language-Integrated Query) для итерации всех компонентов BindingSource и вызова метода EndEdit для каждого BindingSource на форме.

Для вызова метода EndEdit для всех компонентов BindingSource на форме

  1. Добавьте следующий код в форму, содержащую компоненты BindingSource.

            private void EndEditOnAllBindingSources()
            {
                var BindingSourcesQuery =
                    from Component bindingSources in this.components.Components
                    where bindingSources is BindingSource
                    select bindingSources;
    
                foreach (BindingSource bindingSource in BindingSourcesQuery)
                {
                    bindingSource.EndEdit();
                }
            }
    
        Private Sub EndEditOnAllBindingSources()
            Dim BindingSourcesQuery = From bindingsources In Me.components.Components 
                          Where (TypeOf bindingsources Is Windows.Forms.BindingSource) 
                          Select bindingsources
    
            For Each bindingSource As Windows.Forms.BindingSource In BindingSourcesQuery
                bindingSource.EndEdit()
            Next
        End Sub
    
  2. Добавьте следующую строку кода непосредственно перед любыми вызовами сохранения данных формы (метод TableAdapterManager.UpdateAll()):

                EndEditOnAllBindingSources();
    
            Me.EndEditOnAllBindingSources()
    

См. также

Общие сведения об иерархическом обновлении
Общие сведения о компоненте TableAdapterManager
Общие сведения об адаптере таблиц
Общие сведения о компоненте BindingSource