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 ControleNavegadorInherits System.Windows.Forms.UserControl
Public Property DataSource() As CurrencyManager Get Return objCurrManager End Get Set(ByVal Valor As CurrencyManager)objCurrManager = Valor SetStatus() End Set End PropertySub Proximo() If objCurrManager.Position < objCurrManager.Count Then objCurrManager.Position = objCurrManager.Position + 1 SetStatus() End If End SubSub Anterior() If objCurrManager.Position > 0 Then objCurrManager.Position = objCurrManager.Position - 1 SetStatus() End If End SubSub 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 SubPrivate 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 da As New OleDbDataAdapter("select * from Produtos", cnn) Dim ds As New DataSet()
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))
|
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#