VB.NET - Criando um controle p/Navegação de registros

Neste artigo vou criar um controle personalizado para navegar pelos registros de uma tabela de um banco de dados.  Vou criar uma solução onde teremos dois projetos. O primeiro projeto do tipo Windows Control Library será o controle de usuário e irá ter a funcionalidade de percorrer registros de uma tabela o outro projeto será do tipo Windows Application e será usado para testar o controle criado.

1- Criando o controle personalizado

- Inicie o VS.NET e crie um novo Projeto do Tipo  Windows Control Library com o nome ControleNavegador.

- Insira quatro botões de comandos e uma label no UserControl em modo de desenho conforme figura abaixo:

Agora insira o código abaixo no UserControl:

Public Class ControleNavegador

    Inherits System.Windows.Forms.UserControl


Private
objCurrManager As CurrencyManager

 

Public Property DataSource() As CurrencyManager

   Get

       Return objCurrManager

   End Get

   Set(ByVal Valor As CurrencyManager)

       objCurrManager = Valor

       SetStatus()

   End Set

End Property

 

Sub Proximo()

   If objCurrManager.Position < objCurrManager.Count Then

       objCurrManager.Position = objCurrManager.Position + 1

      SetStatus()

  End If

End Sub

 

Sub Anterior()

  If objCurrManager.Position > 0 Then

      objCurrManager.Position = objCurrManager.Position - 1

      SetStatus()

   End If

End Sub

Sub Primeiro()

   objCurrManager.Position = 0

   SetStatus()

End Sub

 

Sub Ultimo()

   objCurrManager.Position = objCurrManager.Count - 1

   SetStatus()

End Sub

 

Sub SetStatus()

    If Not DataSource Is Nothing Then

        lblregistros.Text = (objCurrManager.Position + 1) & " de " & objCurrManager.Count

    End If

End Sub

 

Private Sub cmdPrimeiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrimeiro.Click

Primeiro()

End Sub

Private Sub cmdAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAnterior.Click

Anterior()

End Sub

Private Sub cmdProximo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdProximo.Click

Proximo()

End Sub

Private Sub cmdUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUltimo.Click

Ultimo()

End Sub

 

End Class

 

No código estou criando :

- Métodos para navegar pelos registros e para determinar o status atual do registro vinculado ao controle.

Estou criando também a propriedade DataSource do tipo CurrencyManager . Como o controle irá trabalhar com dados vinculados em formulários Windows você precisa entender o CurrencyManager.

Qualquer fonte de dados que você vincula em um controle de formulário possui um objeto CurrencyManager associado. Este objeto gerencia e supervisiona a vinculação a uma fonte de dados. Existe um objeto CurrencyManager no formulário para cada fonte de dados vinculada. Se os controles de formulário estiverem todos vinculados a mesma fonte de dados então eles irão compartilhar o mesmo CurrencyManager.

Quando os controles estiverem vinculados a fonte de dados diferentes , devem existir mais de um objeto CurrencyManager no formulário , e , cada controle estará vinculado um deles.

A classe CurrencyManager é usada para manter os controles vinculados sincronizados entre si exibindo os dados do mesmo registro. Ela faz isto gerenciando uma coleção de dados vinculados fornecidos pela fonte de dados.

No VB.NET as fontes de dados não mantêm a posição do controle dentro dos dados usamos a propriedade Position do CurrencyManager para determinar a posição dos dados vinculados aos controles.

Como o controle não irá cuidar da conexão coma fonte de dados apenas isto basta para termos a funcionalidade de navegação pelos registros vinculados a uma fonte de dados.

2- Criando o projeto Windows Forms para testar o  controle

Após compilar o projeto vou incluir um novo projeto a solução anterior. Para isto faça o seguinte :

Para realizar o teste irei usar a tabela Produtos do banco de dados Northwind.mdb que esta na pasta c:\teste.

Inclua no formulário dois TextBox e o controle de navegação criado a partir da ToolBox conforme abaixo.

Agora insira o código abaixo no evento Load formulário form1.vb:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 

Dim connstr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= c:\teste\Northwind.mdb"


Dim
cnn As New OleDbConnection(connstr)

Dim da As New OleDbDataAdapter("select * from Produtos", cnn)

Dim ds As New DataSet()


Try

    da.Fill(ds, "produtos")

Catch ex As Exception

    MsgBox(ex.Message)

End Try

 

 TextBox1.DataBindings.Add("text", ds.Tables(0), "NomeDoProduto")

 TextBox2.DataBindings.Add("text", ds.Tables(0), "PreçoUnitário")

 

 ControleNavegador1.DataSource = Me.BindingContext(ds.Tables(0))


End
Sub

 

Rode o projeto e pronto :

Você acabou de criar um controle personalizado para navegação de registros em modo vinculado no VB.NET.

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:


José Carlos Macoratti