VB .NET - Usando o controle TreeView
O componente TreeView permite criar uma interface intuitiva e consistente com o usuário e neste artigo eu vou procurar mostrar como usar o componente TreeView no VB.NET. Vamos mostrar como usar o controle TreeView para exibir os dados das tabelas Fornecedores e Produtos do banco de dados Northwind.mdb usando a nova classe de acesso a dados : ADO.NET.
1 - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
2- No formulário padrão - form1.vb - vamos inserir os seguintes componentes : TreeView , Button , ImageList . Conforme layout abaixo :
- O controle
TreeView pode exibir ícones próximo a cada nó.Os ícones são
posicionados no lado esquerdo do texto do nó. Para exibir os ícones devemos
associar o controle TreeView a um controle ImageList. - Para fazer a vinculação do ImageList ao TreeView defina a propriedade ImageList do controle TreeView para um controle ImageList existente. Podemos fazer isto via janela de propriedades ou via código assim : TreeView1.ImageList = ImageList1 - Vamos usar o controle ImageList para exibir os ícones ao lado de cada nó no controle TreeView
|
- O controle ImageList irá conter as imagens usadas no controle TreeView ; para isto devemos definir quais imagens desejamos usar através da propriedade Images do controle ImageList.
Clique sobre o controle ImageList e na janela propriedades clique em Images ...
1 - Para incluir imagens clique
no botão - Add e selecione as imagens desejadas
- Quando encerrar basta clicar no botão OK. 2- Podemos fazer esta atribuição via código , neste caso , devemos definir as propriedades : ImageIndex e SelectedImageIndex do nó , onde :
Exemplo:
Obs:Podemos exibir também caixas de verificação (checkBox) próximo aos nós ; para isto basta definir como True a propriedade CheckBoxes. |
Com o controle ImageList configurado e vinculado ao controle TreeView podemos seguir em frente e implementar as funcionalidades do nosso projeto , para isto vamos usar os eventos : AfterCollapse e AfterExpand e os métodos BeginUpdate e EndUpdate do controle TreeView.
|
|
Vamos usar também uma conexão ADO.NET com a base de dados Northwind.mdb usando um OleDbDataReader .
- No evento Click do botão de comando - btnPrencheTreeView - vamos associar o código que declara as variáveis , cria a conexão com o banco de dados e define a instrução SQL que exibirá os registros das tabelas Fornecedores e Produtos.
Private
Sub
btnPreencheTreeView_Click(ByVal
sender As
System.Object, ByVal
e As System.EventArgs) Handles
btnPreencheTreeView.Click
Dim conexao As String Dim cnBDNorthwind As OleDb.OleDbConnection Dim sql As String
conexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\Northwind.mdb" cnBDNorthwind = New OleDb.OleDbConnection(conexao)
Try cnBDNorthwind.Open() Catch erro As System.Exception MessageBox.Show(erro.GetBaseException.ToString, "Erro de conexão ao banco de dados", MessageBoxButtons.OK) End Try
TreeView1.BeginUpdate() TreeView1.Nodes.Clear()
sql = "SELECT Fornecedores.CódigoDoFornecedor, Fornecedores.NomeDaEmpresa, Produtos.CódigoDoProduto, Produtos.NomeDoProduto" sql = sql & " FROM Fornecedores" sql = sql & " INNER JOIN Produtos ON Fornecedores.CódigoDoFornecedor = Produtos.CódigoDoFornecedor" sql = sql & " ORDER BY Fornecedores.NomeDaEmpresa"
Dim cmdFornecedores As New OleDb.OleDbCommand(sql, cnBDNorthwind) Dim drFornecedores As OleDb.OleDbDataReader
drFornecedores = cmdFornecedores.ExecuteReader
Dim noFornecedor As TreeNode Dim noProduto As TreeNode Dim sgnCodFornecedor As Single = 0 Dim sgnCodProduto As Single = 0
While drFornecedores.Read
If Not drFornecedores("CódigoDoFornecedor") = sgnCodFornecedor Then noFornecedor = New TreeNode() With noFornecedor .ImageIndex = 0 .Tag = "Fornecedor" .Text = drFornecedores("NomeDaEmpresa") End With TreeView1.Nodes.Add(noFornecedor) sgnCodFornecedor = drFornecedores("CódigoDoFornecedor") End If If Not drFornecedores("CódigoDoProduto") = sgnCodProduto Then noProduto = New TreeNode() With noProduto .ImageIndex = 1 .Tag = "Produto" .Text = drFornecedores("NomeDoProduto") End With TreeView1.Nodes(noFornecedor.Index).Nodes.Add(noProduto) sgnCodProduto = drFornecedores("CódigoDoProduto") End If End While
drFornecedores.Close() TreeView1.EndUpdate() cnBDNorthwind.Close()
End Sub |
Como funciona ?
1- A string de conexão usa o provedor OLEDB (lembra da ADO ?) e deve informar o caminho e nome do banco de dados
conexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\Northwind.mdb"
2- A instrução SQL é quem vai permitir que os dados sejam extraídos das tabelas e estejam relacionados
sql = "SELECT Fornecedores.CódigoDoFornecedor, Fornecedores.NomeDaEmpresa, Produtos.CódigoDoProduto, Produtos.NomeDoProduto"
sql = sql & " FROM Fornecedores"
sql = sql & " INNER JOIN Produtos ON Fornecedores.CódigoDoFornecedor = Produtos.CódigoDoFornecedor"
sql = sql & " ORDER BY Fornecedores.NomeDaEmpresa"
3- Definimos e criamos um objeto OleDbDataReader passando a instrução SQL e a conexão com o banco de dados
Dim cmdFornecedores As New OleDb.OleDbCommand(sql, cnBDNorthwind)
Dim drFornecedores As OleDb.OleDbDataReader
drFornecedores = cmdFornecedores.ExecuteReader
O objeto OleDbDataReader fornece uma maneira de ler um fluxo de dados somente leitura de um fonte de dados. Para criar um OleDbDataReader invocamos o método ExecuteReader do objeto OleDbCommand. Enquanto o OleDbDataReader estiver em uso o objeto OleDbConnection associado esta sendo usado servindo o OleDbDataReader e nenhuma operação pode ser realizada em OleDbConnection ; você só pode fechá-lo.(Close).
4- Depois percorremos o objeto OleDbDataReader e criamos os nós com o nome dos fornecedores :
If Not drFornecedores("CódigoDoFornecedor") = sgnCodFornecedor Then
noFornecedor = New TreeNode()
With noFornecedor
.ImageIndex = 0
.Tag = "Fornecedor"
.Text = drFornecedores("NomeDaEmpresa")
End With
TreeView1.Nodes.Add(noFornecedor)
sgnCodFornecedor = drFornecedores("CódigoDoFornecedor")
End If
5- A seguir percorremos o objeto OleDbDataReader e criamos os nós dos produtos relacionados a cada fornecedor:
If Not drFornecedores("CódigoDoProduto") = sgnCodProduto Then
noProduto = New TreeNode()
With noProduto
.ImageIndex = 1
.Tag = "Produto"
.Text = drFornecedores("NomeDoProduto")
End With
TreeView1.Nodes(noFornecedor.Index).Nodes.Add(noProduto)
sgnCodProduto = drFornecedores("CódigoDoProduto")
End If
Para terminar vamos mostrar o código associado aos eventos : AfterCollapse e AfterExpand . Como no nosso projeto temos somente um nível na árvore de nós o código relacionado a estes eventos é apenas ilustrativo. Se tivéssemos mais níveis poderíamos associar outros ícones a cada estado e fazer o tratamento usando os eventos citados.
Private
Sub
TreeView1_AfterCollapse(ByVal
sender As Object,
ByVal e
As System.Windows.Forms.TreeViewEventArgs)
Handles
TreeView1.AfterCollapse
Select Case e.Node.Tag Case "Fornecedor" e.Node.ImageIndex = 0 Case "Produto" e.Node.ImageIndex = 1 End Select End SubPrivate Sub TreeView1_AfterExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterExpand Select Case e.Node.Tag Case "Fornecedor" e.Node.ImageIndex = 0 Case "Produto" e.Node.ImageIndex = 1 End Select End Sub |
Executando o projeto teremos a seguinte janela :
Neste artigo apenas estou apenas exibindo os dados usando o controle TreeView.
Aguardem mais artigos sobre o controle TreeView onde iremos mostrar como incluir , alterar e excluir dados usando esta interface.
Até mais ...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#