Como: adicionar validação para um Dataset de n camadas

Adicionar validação a um dataset que é separado em uma solução de n-camadas é basicamente igual a adicionar validação para um único arquivo DataSet (um DataSet em um projeto único).O momento sugerido para executar a validação nos dados é durante os eventos ColumnChanging e / ou RowChanging de uma tabela de dados.

O Criando e editando conjuntos de dados tipados fornece a funcionalidade para criar classes parciais para as quais você pode adicionar código de usuário para coluna e linha alterando eventos das tabelas de dados no dataset.Para obter mais informações sobre como adicionar código para um conjunto de dados em uma solução de n-camadas, consulte Como: adicionar código para conjuntos de dados em aplicativos de n camadas e Como: adicionar código ao TableAdapters em aplicativos de n camadas.Para obter mais informações sobre classes parciais, consulte Como: dividir uma classe em Classes parciais (Designer de classe) ou Parcial Classes e métodos (guia de programação do C#).

ObservaçãoObservação

Quando você separar DataSets de TableAdapters (configurando a propriedade DataSet Project), classes parciais DataSet existentes no projeto não serão movidas automaticamente.Classes parciais DataSet existente devem ser movidas manualmente para o projeto DataSet.

ObservaçãoObservação

O Dataset Designer não cria automaticamente manipuladores de eventos em C# para os eventos ColumnChanging e RowChanging.Você precisa criar um manipulador de eventos manualmente e conectar o manipulador de eventos ao evento subjacente.Os procedimentos a seguir fornecem as etapas para criar os manipuladores de eventos necessários em C# e em Visual Basic.

Validando alterações para colunas individuais

Valide valores em colunas individuais manipulando o evento ColumnChanging.O evento ColumnChanging é gerado quando o valor em uma coluna é modificado.Crie um manipulador de eventos para o evento ColumnChanging clicando duas vezes na coluna desejada no Criando e editando conjuntos de dados tipados.

Na primeira vez que você clicar duas vezes em uma coluna, o designer gera um manipulador de eventos para o evento ColumnChanging.Além do evento ColumnChanging, uma instrução If…Then também é criada que testa a coluna específica.Por exemplo, o código a seguir é gerado quando a coluna DataDeEntrega na tabela Pedidos do Northwind é clicada duas vezes:

Private Sub OrdersDataTable_ColumnChanging(ByVal sender As System.Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles Me.ColumnChanging
    If (e.Column.ColumnName = Me.RequiredDateColumn.ColumnName) Then
        ' Add validation code here.
    End If
End Sub
ObservaçãoObservação

Em projetos C#, o DataSet Designer cria classes parciais somente para o conjunto de dados e tabelas individuais no DataSet.O DataSet Designer não cria automaticamente manipuladores de eventos para os eventos ColumnChanging e RowChanging em C# como ele faz em Visual Basic. Em projetos C#, você precisa construir manualmente um método para manipular o evento e conectar o método ao evento subjacente.Os procedimentos a seguir fornecem as etapas para criar os manipuladores de eventos necessários em C# e em Visual Basic.

ObservaçãoObservação

Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Configurações de Visual Studio.

Para adicionar validação durante alterações em valores de colunas individuais

  1. Abra o dataset em Criando e editando conjuntos de dados tipados clicando duas vezes no arquivo de .xsd no solution Explorer.Para mais informações, consulte Como: abrir um Dataset no Dataset Designer.

  2. Clique duas vezes na coluna que você deseja validar.Essa ação cria o manipulador de eventos ColumnChanging.

    ObservaçãoObservação

    O Dataset Designer não cria automaticamente um manipulador para o evento de C#.O código necessário para manipular o evento em C# é incluído abaixo.SampleColumnChangingEvent é criado e é enganchado então até o evento de ColumnChanging no método de EndInit .

  3. Adicione código para verificar que e.ProposedValue contém dados que atendem aos requisitos de seu aplicativo.Se o valor proposto é inaceitável, configure a coluna para indicar que ele contém um erro.

    O exemplo de código a seguir valida que a coluna quantidade contém mais de 0.Se a quantidade for menor ou igual a 0, a coluna é definida como um erro.A cláusula de Else limpa o erro se a quantidade for maior que 0.O código no manipulador de eventos de alteração de coluna deve se parecer com o seguinte:

    If (e.Column.ColumnName = Me.QuantityColumn.ColumnName) Then
        If CType(e.ProposedValue, Short) <= 0 Then
            e.Row.SetColumnError(e.Column, "Quantity must be greater than 0")
        Else
            e.Row.SetColumnError(e.Column, "")
        End If
    End If
    
    // C#
    // Add this code to the DataTable 
    // partial class.
    
        public override void EndInit()
        {
            base.EndInit();
            // Hook up the ColumnChanging event
            // to call the SampleColumnChangingEvent method.
            ColumnChanging += SampleColumnChangingEvent;
        }
    
        public void SampleColumnChangingEvent(object sender, System.Data.DataColumnChangeEventArgs e)
        {
            if (e.Column.ColumnName == QuantityColumn.ColumnName)
            {
                if ((short)e.ProposedValue <= 0)
                {
                    e.Row.SetColumnError("Quantity", "Quantity must be greater than 0");
                }
                else
                {
                    e.Row.SetColumnError("Quantity", "");
                }
            }
        }
    

Validando alterações em linhas inteiras

Valide valores em todas as linhas manipulando o evento RowChanging.O evento RowChanging é gerado quando os valores em todas as colunas são confirmados.É necessário validar no evento RowChanging quando o valor em uma coluna depende do valor em outra coluna.Por exemplo, considere DataDoPedido e DataDeEntrega na tabela Pedidos no Northwind.Quando pedidos estão sendo inseridos, a validação certifica que um pedido não é inserido quando a DataDeEntrega é igual ou anterior à DataDoPedido.Neste exemplo, os valores de ambas as colunas DataDeEntrega e DataDoPedido precisam ser comparados, para que a validação da alteração de uma coluna individual não faça sentido.

Crie um manipulador de eventos para o evento RowChanging clicando duas vezes no nome da tabela na barra de título da tabela no Criando e editando conjuntos de dados tipados.

Para adicionar validação durante alterações em linhas inteiras

  1. Abra o dataset em Criando e editando conjuntos de dados tipados clicando duas vezes no arquivo de .xsd no solution Explorer.Para mais informações, consulte Como: abrir um Dataset no Dataset Designer.

  2. Clique duas vezes na barra de título da tabela de dados no designer.

    Uma classe parcial é criada com um manipulador de eventos RowChanging e abre no Editor de Código.

    ObservaçãoObservação

    O Dataset Designer não cria automaticamente um manipulador para o evento RowChanging em projetos C#.Você precisa criar um método para manipular o evento RowChanging e executar o código para ligar o evento no método de inicialização da tabela.

  3. Adicione um código de usuário dentro da declaração de classe parcial.

  4. O código a seguir mostra onde adicionar código de usuário para validar durante o evento RowChanging para Visual Basic:

    Partial Class OrdersDataTable
        Private Sub OrdersDataTable_OrdersRowChanging(ByVal sender As System.Object, ByVal e As OrdersRowChangeEvent) Handles Me.OrdersRowChanging
            ' Add logic to validate columns here.
            If e.Row.RequiredDate <= e.Row.OrderDate Then
                ' Set the RowError if validation fails.
                e.Row.RowError = "Required Date cannot be on or before the OrderDate"
            Else
                ' Clear the RowError when validation passes.
                e.Row.RowError = ""
            End If
        End Sub
    End Class
    
  5. O código a seguir mostra como criar o manipulador de eventos RowChanging e onde adicionar código de usuário para validar durante o evento RowChanging para C#:

    partial class OrdersDataTable
    {
        public override void EndInit()
        {
            base.EndInit();
            // Hook up the event to the
            // RowChangingEvent method.
            OrdersRowChanging += RowChangingEvent;
        }
    
        public void RowChangingEvent(object sender, OrdersRowChangeEvent e)
        {
            // Perfom the validation logic.
            if (e.Row.RequiredDate <= e.Row.OrderDate)
            {
                // Set the row to an error when validation fails.
                e.Row.RowError = "Required Date cannot be on or before the OrderDate";
            }
            else
            {
                // Clear the RowError if validation passes.
                e.Row.RowError = "";
            }
        }
    }
    

Consulte também

Tarefas

Passo a passo: Criando um aplicativo de dados de n camadas

Conceitos

Novidades para desenvolvimento de aplicativos de dados no Visual Studio 2012

Visão geral dos aplicativos de dados de n camadas

Validação de dados em Datasets