Adicionar validação a um conjunto de dados de n camadas
Publicado: abril de 2016
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 Adicionar código ao datasets em aplicativos de n camadas e Adicionar código a TableAdapters em aplicativos de n camadas. Para obter mais informações sobre classes parciais, consulte How to: Split a Class into Partial Classes (Class Designer) ou Classes e métodos partial.
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 diferentes nomes ou locais para alguns dos elementos de 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, confira Personalizando o IDE.
Para adicionar a validação durante alterações a valores de colunas individuais
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.
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.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
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.
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.
Adicione um código de usuário dentro da declaração de classe parcial.
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
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
Visão geral de aplicativos de dados de N camadas
Instruções passo a passo: criando um aplicativo de dados de N camadas
Validar dados em conjuntos de dados