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

Обновлен: Ноябрь 2007

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

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

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

Bb629320.alert_note(ru-ru,VS.90).gifПримечание.

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

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

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

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

    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
    
    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();
        }
    }
    
  2. Добавьте следующую строку кода непосредственно перед любыми вызовами сохранения данных формы (метод TableAdapterManager.UpdateAll()):

    Me.EndEditOnAllBindingSources()
    
    EndEditOnAllBindingSources();
    

См. также

Основные понятия

Общие сведения об иерархическом обновлении

Общие сведения о компоненте TableAdapterManager

Общие сведения об адаптере таблиц

Ссылки

Общие сведения о компоненте BindingSource