VB.NET - Usando o CurrencyManager
Neste artigo você vai aprender um pouco mais sobre a classe CurrencyManager. Esta classe gerencia uma lista de objetos vinculados e deriva da classe BindingManagerBase. Você usa o BindingContext para retornar um CurencyManager ou PropertyManager.
Neste artigo eu vou criar uma classe chamada Pessoas (na verdade uma classe deveria estar no singular). Esta classe apenas fornece 3 propriedades públicas : Nome , Endereco e Profissao e Email.
Vou criar uma coleção de objetos Pessoa e a seguir obter um CurrencyManager para gerenciar a coleção de pessoas. Você pode estender o projeto persistindo os dados usando serialização ou outro recurso. Não vou portanto me preocupar em salvar os dados usados.
Inicie um novo projeto no VS.NET do tipo Windows Application usando a linguagem VB.NET. No formulário padrão altere o nome para frmCurrencyManager e inclua os controles conforme abaixo:
Controles
usados no formulário - frmCurrencyManager 4 TextBox , 5 labels, 4 Button |
O código da classe Pessoas é dada a seguir:(Como eu já disse é aconselhável usar o nome da classe no singular.)
Para incluir uma classe no projeto selecione a opção Add Class no Menu Project:
Public Class Pessoas Private m_Nome As String Private m_Endereco As String Private m_Profissao As String Private m_Email As String Public Property Nome() As String Get Return m_Nome End Get Set(ByVal Value As String) m_Nome = Value End Set End Property Public Property Endereco() As String Get Return m_Endereco End Get Set(ByVal Value As String) m_Endereco = Value End Set End Property Public Property Profissao() As String Get Return m_Profissao End Get Set(ByVal Value As String) m_Profissao = Value End Set End Property Public Property Email() As String Get Return m_Email End Get Set(ByVal Value As String) m_Email = Value End Set End Property Public Sub New(ByVal nome As String, ByVal endereco As String, ByVal profissao As String, ByVal email As String) m_Nome = nome m_Endereco = endereco m_Profissao = profissao m_Email = Email End Sub End Class |
Lembrando que a classe acima apresenta 4 propriedades e um construtor (New) que atribui os valores as variáveis objeto que são membros da classe.
Agora vejamos o código do evento Load do formulário:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'cria uma nova coleção de objetos Pessoas Pessoas = New Collection ' inclui alguns valores no objeto e os inclui na coleção Pessoas.Add(New Pessoas("Jose Carlos Macoratti", "Rua Mirassol , 100", "teste", "macoratti@yahoo.com")) Pessoas.Add(New Pessoas("Jessica Naara Lima", "Al. Lima , 10", "Médica", "jessica@bol.com.br")) Pessoas.Add(New Pessoas("Jefferson Andre Ribeiro", "Pça Sol , 108", "Engenheiro", "jefferson@ig.com.br")) 'cria um currencymanager para a coleção m_CurrencyManager = CType(Me.BindingContext(Pessoas), CurrencyManager) 'vincula as propriedades a cada controle txtNome.DataBindings.Add("Text", Pessoas, "Nome") txtEndereco.DataBindings.Add("Text", Pessoas, "Endereco") txtProfissao.DataBindings.Add("Text", Pessoas, "Profissao") txtEmail.DataBindings.Add("Text", Pessoas, "Email") 'atribui as rotinas FormataDados e ParseDados ao controle txtProfissao Dim binding_object As Binding = txtProfissao.DataBindings("Text") AddHandler binding_object.Format, AddressOf FormataDados AddHandler binding_object.Parse, AddressOf ParseDados 'atualiza o currencyManager m_CurrencyManager.Refresh() atualizaEstadoControle() End Sub
|
Quando o formulário for carregado uma coleção de objetos Pessoas será criado e um CurrencyManager será obtido para este objeto.
A seguir o programa vincula as caixas de texto do formulário as coleção de objetos Pessoas.
A seguir as rotinas FormataDados e ParseDados:
Private Sub FormataDados(ByVal sender As Object, ByVal e As ConvertEventArgs) If e.Value.Equals("teste1") Then e.Value = "Alterado" Dim binding_object As Binding = DirectCast(sender, Binding) binding_object.Control.BackColor = Color.Gold Else Dim binding_object As Binding = DirectCast(sender, Binding) binding_object.Control.BackColor = Color.White End If End Sub
|
Private Sub ParseDados(ByVal sender As Object, ByVal e As ConvertEventArgs) If e.Value.Equals("teste2") Then e.Value = "Macoratti" End If End Sub |
Neste código eu apenas estou verificando se o conteúdo do controle txtProfissao é alterado para "teste1". Neste caso o objeto é atualizado com o valor Alterado e a cor de fundo para amarelo ouro.
Se o conteúdo for alterado para "teste2" então o valor do objeto é alterado para Macoratti.
A rotina que atualizaEstadoControle é dado a seguir:
Private Sub atualizaEstadoControle() btnAnt.Enabled = m_CurrencyManager.Position > 0 btnProx.Enabled = m_CurrencyManager.Position < m_CurrencyManager.Count - 1 lblposicao.Text = m_CurrencyManager.Position + 1 & " de " & m_CurrencyManager.Count End Sub |
Neste código os botões são habilitados/desabilitados conforme a posição do objeto CurrencyManager. O valor é exibido na Label lblPosicao.
Para encerrar o código correspondente a cada evento Click dos botões de comando do formulário:
Private Sub btnAnt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnt.Click m_CurrencyManager.Position -= 1 End Sub Private Sub btnProx_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProx.Click m_CurrencyManager.Position += 1 End Sub Private Sub m_CurrencyManager_PositionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles m_CurrencyManager.PositionChanged atualizaEstadoControle() End Sub Private Sub btnInc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInc.Click m_CurrencyManager.List.Add(New Pessoas("", "", "", "")) m_CurrencyManager.Refresh() m_CurrencyManager.Position = m_CurrencyManager.Count - 1 atualizaEstadoControle() End Sub Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click m_CurrencyManager.RemoveAt(m_CurrencyManager.Position) m_CurrencyManager.Refresh() atualizaEstadoControle() End Sub |
Note que o botão Inclui (+) invoca o construtor(New) com valores vazios para todas as propriedades do objeto Pessoas.
O código do botão Excluir (X) usa o método RemoveAt(posicao) para remover o valor do objeto.
O código dos demais controles (< e >) apenas controla a navegação pelos registros.
Executando o projeto temos o seguinte resultado:
Exibindo os dados da coleção | Mudando o valor para teste1 o valor do objeto muda para Alterado | Clicando no botão (+) um novo valor pode ser incluído. |
Pegue o código da classe e do formulário aqui : cmng.zip
Até o próximo artigo VB.NET.
Romanos 7:14 Porque bem sabemos que a lei é espiritual; mas eu sou carnal, vendido sob o pecado.
Romanos 7:15 Pois o que faço, não o entendo; porque o que quero, isso não pratico; mas o que aborreço, isso faço.
Romanos 7:16 E, se faço o que não quero, consinto com a lei, que é boa.
Romanos 7:17 Agora, porém, não sou mais eu que faço isto, mas o pecado que habita em mim.
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#