VB .NET - DataBinding - DataTable e CurrencyManager (dica rápida)


Hoje veremos como criar um DataTable via código, exibir os registros em um DataGridView e usar o objeto CurrencyManager para realizar a navegação pelos registros.

Do que você vai precisar ?

  1. Visual Studio 2012 Express for desktop

Abra o Visual Studio 2012 Express for desktop e crie um novo projeto do tipo Windows Forms Application com o nome DataGridView_CurrencyManager;

No formulário form1.vb inclua os seguintes controles a partir da ToolBox:

  1. DataGridView
  2. Groupbox 
  3. Label1, Label2, Label3 e Label4
  4. Button - btnAnterior - <<Anterior
  5. Button - btnProximo - Proximo>>
  6. Button - btnEncerrar - Encerrar

O leiaute do formulário é mostrado a seguir:

Vamos definir uma variável privada referente ao DataTable - dt - que iremos criar e outra referente a classe CurrencyManager. Esta classe gerencia uma lista de objetos vinculados e deriva da classe BindingManagerBase.  Você usa o BindingContext para retornar um CurrencyManager ou PropertyManager.

Private dt As New DataTable
Private cma As CurrencyManager = DirectCast(BindingContext(dt), CurrencyManager)

Vamos ao código:

1- No evento Load do formulário é onde vamos carregar o datatable com dados e exibir os registros no datagridview:

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'define as colunas
        dt.Columns.Add("Nome")
        dt.Columns.Add("Cidade")
        dt.Columns.Add("Estado")
        'preenche o datatable
        dt.LoadDataRow(New Object() {"Jose Carlos", "Brasilia", "Distrito Federal"}, True)
        dt.LoadDataRow(New Object() {"Miriam Estela", "Goiânia", "Goiás"}, True)
        dt.LoadDataRow(New Object() {"Janice Rachel", "Lins", "São Paulo"}, True)
        dt.LoadDataRow(New Object() {"Yuri Siqueira", "Alfenas", "Minas Gerais"}, True)
        dt.LoadDataRow(New Object() {"Bianca Rodrigues", "Londrina", "Paraná"}, True)
        dt.LoadDataRow(New Object() {"Paulo Clemente", "Salvador", "Bahia"}, True)
        dt.LoadDataRow(New Object() {"Marcos Bueno Lima", "Cabo Frio", "Rio de Janeiro"}, True)
        dt.LoadDataRow(New Object() {"Maria Souza", "Santos", "São Paulo"}, True)
        'preenche o datagridview
        DataGridView1.DataSource = dt
        'exibe os valores nas labels
        Label1.DataBindings.Add("Text", dt, "Nome")
        Label2.DataBindings.Add("Text", dt, "Cidade")
        Label3.DataBindings.Add("Text", dt, "Estado")
        Label4.Text = "0"
        AddHandler cma.CurrentChanged, AddressOf CurrentChanged
    End Sub

Usamos o método LoadDataRow para localizar e atualizar uma linha do datatable. Esse método localiza e atualiza uma linha específica. Se nenhuma linha correspondente for encontrada, uma nova linha será criada usando os valores fornecidos conforme fizemos no código.

2- No evento Click dos botões de comando temos o código que usa o CurrencyManager e sua propriedade Position para obter a posição atual da lista e assim permitira navegar pelos registros :

 Private Sub btnAnterior_Click(sender As Object, e As EventArgs) Handles btnAnterior.Click
        If cma.Position > 0 Then
            cma.Position -= 1
        End If
    End Sub

    Private Sub btnProximo_Click(sender As Object, e As EventArgs) Handles btnProximo.Click
        If cma.Position < dt.Rows.Count + 2 Then
            cma.Position += 1
        End If
    End Sub

Em um lista de itens podemos visualizar somente um item ou a lista inteira, e, para determinar qual o item será visto definimos a propriedade Position entre o número 0 (o início da lista) e o fim da lista (Count-1).

3- No delegate CurrentChanged  temos a exibição da posição atual no controle Label:

 Private Sub CurrentChanged(ByVal sender As Object, ByVal e As EventArgs)
      Label4.Text = DirectCast(sender, CurrencyManager).Position.ToString
 End Sub

"Delegate" ou Delegado é o nome usado para descrever um procedimento em VB.NET que permite a você controlar o código que atualmente manipula um evento. (Como um evento Change , Click , Load , etc.). Um delegate é então uma classe que pode manipular uma referência um método.

Executando a aplicação teremos o resultado abaixo:

Pegue o projeto completo aqui: DataGridView_CurrencyManager.zip

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:


José Carlos Macoratti