SilverLight - Validação de dados em um DataGrid


Este artigo mostra como realizar a validação de dados em um DataGrid para uma aplicação SilverLight.

Como eu já tratei do assunto validação de dados (veja referências) para conhecer mais detalhes sobre o assunto sugiro que leia os artigos.

A validação de dados permite que as informações gravadas no seu banco de dados tenham integridade e confiabilidade e dessa forma não pode ser desprezada. Se você não realiza validação de dados em suas aplicações elas podem aceitar como informações qualquer entrada que o usuário informar e isso não é aconselhável.

Quando temos elementos vinculados a dados em sua interface em uma aplicação SilverLight, podemos ativar as notificações de alteração e atualização automáticas da interface implementando a interface System.ComponentModel.INotifyPropertyChanged em seus tipos de dados.

Depois, basta disparar os eventos definidos nessas interfaces a partir da implementação dos tipos para fornecer as notificações de mudança.

Validando dados no DataGrid

Abra o Visual WebDeveloper 2010 Express Edition e crie um novo projeto do tipo SilverLight Application usando a linguagem Visual Basic com o nome : validacao_SVL_DataGrid;

A seguir selecione as opções conforme mostra a figura abaixo para o projeto SilverLight:

Ao término dessa etapa você verá na Solution Explorer uma solução contendo dois projetos: O projeto SilverLight e o projeto Web.

Vamos criar agora na aplicação uma classe que irá representar o nosso domínio. Para isso iremos criar no projeto SilverLight a classe Clientes.vb. Após selecionar o projeto SilverLight no menu Project clique em Add Class e inclua uma nova classe chamada Clientes.vb

Defina o código conforme o exibido abaixo para a classe Clientes:

Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Shapes
Imports System.ComponentModel.DataAnnotations
Imports System.ComponentModel

Public Class Clientes
    Implements INotifyPropertyChanged

    Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) 
Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

    Private _Nome As String
    Public Property Nome() As String
        Get
            Return _Nome
        End Get

        Set(ByVal value As String)
            If value.Length < 4 Then
                Throw New ValidationException("O nome do cliente deve conter 4 caracteres no mínimo.")
            End If
            _Nome = value
            RaisePropertyChanged("Nome")
        End Set
    End Property

    Private _Idade As Integer
    Public Property Idade() As Integer
        Get
            Return _Idade
        End Get
        Set(ByVal value As Integer)
            _Idade = value
        End Set
    End Property

    Private _Email As String
    Public Property Email() As String
        Get
            Return _Email
        End Get
        Set(ByVal value As String)
            _Email = value
        End Set
    End Property

    Private Sub RaisePropertyChanged(ByVal propertyName As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
    End Sub
End Class

Este código utiliza o namespace System.ComponentModel.DataAnnotations que permite usarmos a classe ValidationException() para lançar uma exceção para validar o nome do cliente.

A classe ValidationException() representa uma exceção que ocorreu durante a validação de um membro que é marcado como atributo de validação. No nosso exemplo eu estou validando o nome mas poderia definir outras regras de validação para idade e o email.

A classe Clientes implementa a interface INotifyPropertyChanged que notifica o cliente que um valor sofreu alteração.

Em seguida vamos definir no arquivo MainPage.xaml.vb o código que irá preencher a nossa fonte de dados uma coleção de objetos Clientes:

Partial Public Class MainPage
    Inherits UserControl

    Public Sub New()
        InitializeComponent()

        Dim listaClientes As New List(Of Clientes)() From
        { _
              New Clientes() With {.Nome = "Jose Carlos Macoratti", .Idade = 44, .Email = "macoratti@yahoo.com"}, _
              New Clientes() With {.Nome = "Miriam Siqueira", .Idade = 32, .Email = "mimi@yahoo.com.br"}, _
              New Clientes() With {.Nome = "Janice Rachel", .Idade = 17, .Email = "janjan@bol.com.br"}, _
              New Clientes() With {.Nome = "Jefferson Andre", .Idade = 18, .Email = "jeff@uol.com.br"}
        }
        macDataGrid.ItemsSource = listaClientes
    End Sub

End Class

Note que estamos atribuindo a coleção a propriedade ItemsSource do DataGrid definindo assim o databinding.

Agora no arquivo MainPage.xaml vamos incluir um controle DataGrid com Name igual a macDataGrid conforme o leiaute abaixo:

Executando o projeto teremos os dados exibido no DataGrid , ao tentarmos alterar um nome para menos de 5 caracteres teremos a mensagem de erro exibida conforme a figura a seguir, mostrando que nossa regra de validação implementada esta funcionando:

Este é um exemplo bem básico no qual você pode se basear para realizar a sua validação de dados no SilverLight.

Pegue o projeto completo aqui:    validacao_SVL_DataGrid.zip

Porque, onde estiver o vosso tesouro, ali estará também o vosso coração.(Lucas 12:34)

Referências:


José Carlos Macoratti