Compartilhar via


Como adicionar validação a um conjunto de dados de N camadas

Adicionar validação a um conjunto de dados, que fica separado em uma solução de n camadas, é basicamente igual a adicionar validação a um conjunto de dados de arquivo único (um conjunto de dados em um projeto único). O local sugerido para executar a validação nos dados é feito 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 às quais você pode adicionar o código de usuário na coluna e na linha, alterando os eventos das tabelas de dados no conjunto de dados. Para obter mais informações sobre como adicionar código a um conjunto de dados em uma solução de n camadas, consulte Como adicionar código a conjuntos de dados em aplicativos de N camadas e Como adicionar código a 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 Classes e métodos partial (Guia de Programação em C#).

Dica

Quando você separa os conjuntos de dados de TableAdapters (configurando a propriedade Projeto do Conjunto de Dados), as classes parciais do conjunto de dados existentes no projeto não serão movidas automaticamente.As classes parciais de conjunto de dados existentes devem ser movidas manualmente para o projeto do conjunto de dados.

Dica

O Designer de Conjunto de Dados não cria automaticamente manipuladores de eventos no C# para os eventos ColumnChanging e RowChanging.É preciso criar manualmente um manipulador de eventos e conectar o manipulador de eventos ao evento subjacente.Os procedimentos a seguir fornecem as etapas para criar os manipuladores de eventos necessários no C# e no Visual Basic.

Validando alterações para colunas individuais

Valide os 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 RequiredDate na tabela de 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

Dica

Em projetos C#, o Designer de conjunto de dados só cria classes parciais para o conjunto de dados e tabelas individuais no conjunto de dados.O Designer de Conjunto de Dados não cria automaticamente manipuladores de eventos para os eventos ColumnChanging e RowChanging no C#, como ele faz no Visual Basic. Em projetos C#, é preciso criar 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 no C# e no Visual Basic.

Dica

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 Personalizando configurações de desenvolvimento no Visual Studio.

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

  1. Abra o conjunto de dados, Criando e editando conjuntos de dados tipadosclicando duas vezes no arquivo .xsd no Gerenciador de Soluções. Para obter mais informações, consulte Como abrir um conjunto de dados no Designer de Conjunto de Dados.

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

    Dica

    O Designer de Conjunto de Dados não cria automaticamente um manipulador para o evento do C#.O código necessário para manipular o evento no C# está incluído abaixo.SampleColumnChangingEvent é criado e associado ao evento ColumnChanging no método EndInit.

  3. Adicione o código para verificar se e.ProposedValue contém dados que atendem aos requisitos de seu aplicativo. Se o valor proposto for 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 será definida como um erro. A cláusula Else limpa o erro se a quantidade for mais de 0. O código no manipulador de eventos de alteração de coluna deve ser semelhante a:

    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 os valores em todas as linhas manipulando o evento RowChanging. O evento RowChanging é gerado quando os valores de todas as colunas são confirmados. Será necessário validar no evento RowChanging quando o valor de uma coluna depender do valor de outra coluna. Por exemplo, considere OrderDate e RequiredDate na tabela de Pedidos no Northwind. Quando os pedidos estão sendo inseridos, a validação verifica se um pedido não foi inserido quando uma RequiredDate é igual ou anterior à OrderDate. Nesse exemplo, os valores de ambas as colunas RequiredDate e OrderDate precisam ser comparadas, 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 a validação durante alterações a linhas inteiras

  1. Abra o conjunto de dados, Criando e editando conjuntos de dados tipadosclicando duas vezes no arquivo .xsd no Gerenciador de Soluções. Para obter mais informações, consulte Como abrir um conjunto de dados no Designer de Conjunto de Dados.

  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.

    Dica

    O Designer de Conjunto de Dados não cria automaticamente um manipulador de eventos para o evento RowChanging em projetos C#.É preciso 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 o código de usuário para validação 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 o código de usuário para validação 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

Instruções passo a passo: criando um aplicativo de dados de N camadas

Conceitos

Visão geral de aplicativos de dados de N camadas

Validando dados em conjuntos de dados