Como: Edições em processo de confirmação em controles ligados a dados antes de salvar dados

Ao editar valores em controles vinculados a dados, usuários devem navegar fora do registro atual para confirmar o valor atualizado à fonte de dados subjacente à qual o controle está vinculado. Ao arrastar itens da Janela Fontes de Dados para um formulário, o primeiro item que você solta gera código para o evento de clicar no botão de salvar BindingNavigator. Esse código chama o método EndEdit do BindingSource. Portanto, a chamada ao método EndEdit é gerada somente para o primeiro BindingSource que é adicionado ao formulário.

A chamada EndEdit confirma as alterações que estão em processo em quaisquer controles ligados a dados que estão sendo editados atualmente. Portanto, se um controle vinculado a dados ainda tem foco e você clicar no botão Save, todas edições pendentes nesse controle são confirmadas antes de salvar (o método TableAdapterManager.UpdateAll).

Você pode configurar seu aplicativo para confirmar as alterações automaticamente mesmo se um usuário tentar salvar dados sem confirmar as alterações, como parte do processo de salvar.

ObservaçãoObservação

O designer adiciona o código BindingSource.EndEdit somente para o primeiro item descartado em um formulário. Portanto, você precisa adicionar uma linha de código para chamar o método EndEdit para cada BindingSource no formulário. Você pode adicionar manualmente uma linha de código para chamar o método EndEdit para cada BindingSource. Como alternativa, você pode adicionar o método EndEditOnAllBindingSources para o formulário e chamá-lo antes de salvar.

O código a seguir usa uma consulta LINQ (consulta integrada à linguagem) para iterar todos os componentes BindingSource e chamar o método EndEdit para cada BindingSource em um formulário.

Para chamar EndEdit para todos os componentes BindingSource em um formulário

  1. Adicione o seguinte código ao formulário que contém os componentes 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. Adicione a seguinte linha de código imediatamente antes de quaisquer chamadas para salvar os dados do formulário (o método TableAdapterManager.UpdateAll()):

    Me.EndEditOnAllBindingSources()
    
    EndEditOnAllBindingSources();
    

Consulte também

Referência

Visão geral sobre o componente BindingSource

Conceitos

Visão geral sobre atualização hierárquica

Visão geral do TableAdapterManager

Visão geral do TableAdapter