COMO PREENCHER UMA TREEVIEW
Boa tarde amigos, alguém poderia me ajudar a preencher uma TreeView da seguinte maneira:
Usando o BD Northwind e a Tabela Customers.
Preciso mostrar os PaÃses (country) e dentro dos PaÃses, as Cidades (city) de cada paÃs, e, dentro das cidades, os clientes (companyname) de cada cidade.
Não estou conseguindo montrar o próximo nÃvel, ou seja mostrar os clientes.
Meu código está assim:
Sub MontaTreeView()
Dim dtbPaises As New DataTable
Dim dtbCidades As New DataTable
Dim dtbClientes As New DataTable
Dim daPaises As OleDbDataAdapter
Dim daCidades As OleDbDataAdapter
Dim daClientes As OleDbDataAdapter
Dim strconn As String = [Ô]Provider = Microsoft.Jet.OleDB.4.0;Data Source=g:\Northwind.mdb[Ô]
Dim conn As OleDbConnection
Dim i As Integer
Dim j As Integer
Dim l As Integer
conn = New OleDbConnection(strconn)
daPaises = New OleDbDataAdapter([Ô]Select Distinct Country From Customers[Ô], conn)
dtbPaises.Clear()
daPaises.Fill(dtbPaises)
For i = 0 To dtbPaises.Rows.Count - 1
TreeView1.Nodes.Add(dtbPaises.Rows(i).Item([Ô]Country[Ô]))
daCidades = New OleDbDataAdapter([Ô]Select Distinct City, Country From Customers[Ô], conn)
dtbCidades.Clear()
daCidades.Fill(dtbCidades)
For j = 0 To dtbCidades.Rows.Count - 1
If dtbPaises.Rows(i).Item([Ô]Country[Ô]) = dtbCidades.Rows(j).Item([Ô]Country[Ô]) Then
TreeView1.Nodes(i).Nodes.Add(dtbCidades.Rows(j).Item([Ô]City[Ô]))
daClientes = New OleDbDataAdapter([Ô]Select CompanyName, City From Customers[Ô], conn)
dtbClientes.Clear()
daClientes.Fill(dtbClientes)
For l = 0 To dtbClientes.Rows.Count - 1
If dtbCidades.Rows(j).Item([Ô]City[Ô]) = dtbClientes.Rows(l).Item([Ô]City[Ô]) Then
TreeView1.Nodes(0).Nodes.Add(dtbClientes.Rows(l).Item([Ô]CompanyName[Ô]))
End If
Next
End If
Next
Next
conn.Close()
End Sub
Por favor, me ajudem para que eu possa aprender a utilizar esse controle, pois ainda não tinha utilizado.
Até mais.
Usando o BD Northwind e a Tabela Customers.
Preciso mostrar os PaÃses (country) e dentro dos PaÃses, as Cidades (city) de cada paÃs, e, dentro das cidades, os clientes (companyname) de cada cidade.
Não estou conseguindo montrar o próximo nÃvel, ou seja mostrar os clientes.
Meu código está assim:
Sub MontaTreeView()
Dim dtbPaises As New DataTable
Dim dtbCidades As New DataTable
Dim dtbClientes As New DataTable
Dim daPaises As OleDbDataAdapter
Dim daCidades As OleDbDataAdapter
Dim daClientes As OleDbDataAdapter
Dim strconn As String = [Ô]Provider = Microsoft.Jet.OleDB.4.0;Data Source=g:\Northwind.mdb[Ô]
Dim conn As OleDbConnection
Dim i As Integer
Dim j As Integer
Dim l As Integer
conn = New OleDbConnection(strconn)
daPaises = New OleDbDataAdapter([Ô]Select Distinct Country From Customers[Ô], conn)
dtbPaises.Clear()
daPaises.Fill(dtbPaises)
For i = 0 To dtbPaises.Rows.Count - 1
TreeView1.Nodes.Add(dtbPaises.Rows(i).Item([Ô]Country[Ô]))
daCidades = New OleDbDataAdapter([Ô]Select Distinct City, Country From Customers[Ô], conn)
dtbCidades.Clear()
daCidades.Fill(dtbCidades)
For j = 0 To dtbCidades.Rows.Count - 1
If dtbPaises.Rows(i).Item([Ô]Country[Ô]) = dtbCidades.Rows(j).Item([Ô]Country[Ô]) Then
TreeView1.Nodes(i).Nodes.Add(dtbCidades.Rows(j).Item([Ô]City[Ô]))
daClientes = New OleDbDataAdapter([Ô]Select CompanyName, City From Customers[Ô], conn)
dtbClientes.Clear()
daClientes.Fill(dtbClientes)
For l = 0 To dtbClientes.Rows.Count - 1
If dtbCidades.Rows(j).Item([Ô]City[Ô]) = dtbClientes.Rows(l).Item([Ô]City[Ô]) Then
TreeView1.Nodes(0).Nodes.Add(dtbClientes.Rows(l).Item([Ô]CompanyName[Ô]))
End If
Next
End If
Next
Next
conn.Close()
End Sub
Por favor, me ajudem para que eu possa aprender a utilizar esse controle, pois ainda não tinha utilizado.
Até mais.
Amigo, você entende o que este código faz? Se sim, basta acrescentar mais um [Ô]For...Next[Ô] dentro do for...next mais interno que consulta os clientes de acordo com a cidade...
Amigo, pois é, eu fiz assim:
daClientes = New OleDbDataAdapter([Ô]Select CompanyName, City From Customers[Ô], conn)
dtbClientes.Clear()
daClientes.Fill(dtbClientes)
For l = 0 To dtbClientes.Rows.Count - 1
If dtbCidades.Rows(j).Item([Ô]City[Ô]) = dtbClientes.Rows(l).Item([Ô]City[Ô]) Then
TreeView1.Nodes(0).Nodes.Add(dtbClientes.Rows(l).Item([Ô]CompanyName[Ô]))
End If
Next
Mas não está aparecendo os clientes. Tem alguma coisa errada nesse For....Next.
Veja como está mostrando na imagem acima.
daClientes = New OleDbDataAdapter([Ô]Select CompanyName, City From Customers[Ô], conn)
dtbClientes.Clear()
daClientes.Fill(dtbClientes)
For l = 0 To dtbClientes.Rows.Count - 1
If dtbCidades.Rows(j).Item([Ô]City[Ô]) = dtbClientes.Rows(l).Item([Ô]City[Ô]) Then
TreeView1.Nodes(0).Nodes.Add(dtbClientes.Rows(l).Item([Ô]CompanyName[Ô]))
End If
Next
Mas não está aparecendo os clientes. Tem alguma coisa errada nesse For....Next.
Veja como está mostrando na imagem acima.
Na estrutura e sintaxe de código em si, não tem nada errado, mas me parece que você está selecionando todos os clientes, não de acordo com a cidade... mostre como ficou o código inteiro
Eis aqui o código completo:
Sub MontaTreeView()
Dim dtbPaises As New DataTable
Dim dtbCidades As New DataTable
Dim dtbClientes As New DataTable
Dim daPaises As OleDbDataAdapter
Dim daCidades As OleDbDataAdapter
Dim daClientes As OleDbDataAdapter
Dim strconn As String = [Ô]Provider = Microsoft.Jet.OleDB.4.0;Data Source=g:\Northwind.mdb[Ô]
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim no_paises As New TreeNode
Dim no_cidades As New TreeNode
Dim no_clientes As New TreeNode
Dim dspaises As New DataSet
Dim dscidades As New DataSet
Dim dsclientes As New DataSet
Dim dvpaises As New DataView
Dim dvcidades As New DataView
Dim dvclientes As New DataView
Dim conn As New OleDbConnection(strconn)
daPaises = New OleDbDataAdapter([Ô]Select Distinct Country From Customers[Ô], conn)
daCidades = New OleDbDataAdapter([Ô]Select Distinct City, Country From Customers[Ô], conn)
daClientes = New OleDbDataAdapter([Ô]Select CompanyName, City, Country From Customers[Ô], conn)
daPaises.Fill(dtbPaises)
daCidades.Fill(dtbCidades)
daClientes.Fill(dtbClientes)
For i = 0 To dtbPaises.Rows.Count - 1
TreeView1.Nodes.Add(dtbPaises.Rows(i).Item([Ô]Country[Ô]))
For j = 0 To dtbCidades.Rows.Count - 1
If dtbPaises.Rows(i).Item([Ô]Country[Ô]) = dtbCidades.Rows(j).Item([Ô]Country[Ô]) Then
TreeView1.Nodes(i).Nodes.Add(dtbCidades.Rows(j).Item([Ô]City[Ô]))
For k = 0 To dtbClientes.Rows.Count - 1
If dtbCidades.Rows(j).Item([Ô]City[Ô]) = dtbClientes.Rows(k).Item([Ô]City[Ô]) Then
TreeView1.Nodes(j).Nodes.Add(dtbClientes.Rows(k).Item([Ô]CompanyName[Ô]))
End If
Next
End If
Next
Next
conn.Close()
End Sub
Ocorre o seguinte erro:
Specified argument was out of the range of valid values.
Parameter name: index
Nesta linha:
TreeView1.Nodes(j).Nodes.Add(dtbClientes.Rows(k).Item([Ô]CompanyName[Ô]))
Alguém pode me dizer onde estou errando, por favor?
Até mais.
Specified argument was out of the range of valid values.
Parameter name: index
Nesta linha:
TreeView1.Nodes(j).Nodes.Add(dtbClientes.Rows(k).Item([Ô]CompanyName[Ô]))
Alguém pode me dizer onde estou errando, por favor?
Até mais.
Amigo, de uma olhada nesse exemplo que postei, talvez te ajude.
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=8064
o Treeview tem 6 niveis.
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=8064
o Treeview tem 6 niveis.
Estou quase desistindo....
Não consigo fazer.
Deixo o tópico aberto, se alguém mais quiser ajudar.
Vou tomar um cafezinho, minha cabeça está fundindo.
Até mais.
Não consigo fazer.
Deixo o tópico aberto, se alguém mais quiser ajudar.
Vou tomar um cafezinho, minha cabeça está fundindo.
Até mais.
Citação::
Estou quase desistindo....
Não consigo fazer.
Deixo o tópico aberto, se alguém mais quiser ajudar.
Vou tomar um cafezinho, minha cabeça está fundindo.
Até mais.
Chegou olhar o exemplo que te postei ????
Valeu FoxMan,
O seu exemplo é muito bom.
Consegui, finalmente
Até mais.
O seu exemplo é muito bom.
Consegui, finalmente
Até mais.
Tópico encerrado , respostas não são mais permitidas