FILTRO EM TREEVIEW
bem pessoal,
estou com uma duvida que estava me arrancando o couro cabeludo.
estou com um probleminha com o treeview.
eu sei mexer bem com o basico do basico do treeview
sei mapear com bd coisa e tal.
mas eu queria fazer o seguinte:
queira iserir 23 nós,
cada nó teria uma letra como segue abaixo
a-
b-
c
e assim sucessivamente
mas o problema é o seguinte,
como eu faço para quando eu clicar em letras diferente, o treeview,
fazer um filtro com o "select * from tabela where campotext like 'criterio*'
por exemplo, quando eu expandisse a letra (A), só aparecessem registro que comecem com
(A) com expandisse a letra (B) só mostrasse registros que comecem com (B) e assim
sucessivamente
quem puder me ajudar agradecerei muito
cleverton.on@pop.com.br
estou com uma duvida que estava me arrancando o couro cabeludo.
estou com um probleminha com o treeview.
eu sei mexer bem com o basico do basico do treeview
sei mapear com bd coisa e tal.
mas eu queria fazer o seguinte:
queira iserir 23 nós,
cada nó teria uma letra como segue abaixo
a-
b-
c
e assim sucessivamente
mas o problema é o seguinte,
como eu faço para quando eu clicar em letras diferente, o treeview,
fazer um filtro com o "select * from tabela where campotext like 'criterio*'
por exemplo, quando eu expandisse a letra (A), só aparecessem registro que comecem com
(A) com expandisse a letra (B) só mostrasse registros que comecem com (B) e assim
sucessivamente
quem puder me ajudar agradecerei muito
cleverton.on@pop.com.br
tentei fazer o que voce esta precisando uma vez...
depois de apanhar mto de uns "SendMessage" inuteis, decidi por limpar a cada mudanca...
vc cria uma rotina generica que cria os nodes raizes (no seu exemplo - um node para cada letra do alfabeto)
qdo receber o evento NodeClick - vc limpa todos os nodes - carrega os da raiz - depois faz a pesquisa que quiser e preenche esta letra com os dados de seu recordset...
entao sempre que clicar em um node raiz (e isto vc tem de analisar pelo key de seu node ou na hora de verificar o parent) vc limpa tudo e coloca soh o que interessa...
a principio achei q ficaria ruim e lento - mas no final parece mto bom e nao eh lento nao...
depois de apanhar mto de uns "SendMessage" inuteis, decidi por limpar a cada mudanca...
vc cria uma rotina generica que cria os nodes raizes (no seu exemplo - um node para cada letra do alfabeto)
qdo receber o evento NodeClick - vc limpa todos os nodes - carrega os da raiz - depois faz a pesquisa que quiser e preenche esta letra com os dados de seu recordset...
entao sempre que clicar em um node raiz (e isto vc tem de analisar pelo key de seu node ou na hora de verificar o parent) vc limpa tudo e coloca soh o que interessa...
a principio achei q ficaria ruim e lento - mas no final parece mto bom e nao eh lento nao...
a ideia eh mais ou menos assim...
tem de dar uma alterada no conn, rs, e sql - mas a ideia eh essa...
o que pode ficar lento eh que a cada click eu abro e fecho conexao com o banco de dados - mas o preenchimento do treeview eh relativamente rapido...
Option Explicit
Private Sub AddBasicNodes()
Dim N As Node
Dim i As Integer
TreeView1.Nodes.Clear
For i = 65 To 90
Set N = TreeView1.Nodes.Add(, , Chr(i), Chr(i))
N.Tag = "*"
Next i
End Sub
Private Sub AddExpanded(ByVal SQLString As String, ByVal Letter As String)
Dim N As Node
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
conn.ConnectionString = myconnstr
conn.Open
Set rs = New Recordset
rs.ActiveConnection = conn
rs.Open SQLString
Do While Not rs.EOF
Set N = TreeView1.Nodes.Add(Letter, tvwChild, , rs(Campo).Value)
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
End Sub
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
AddBasicNodes
AddExpanded "Select * from Banco where Nome like '" & Node.Text & "*';", Node.Text
End Sub
tem de dar uma alterada no conn, rs, e sql - mas a ideia eh essa...
o que pode ficar lento eh que a cada click eu abro e fecho conexao com o banco de dados - mas o preenchimento do treeview eh relativamente rapido...
Option Explicit
Private Sub AddBasicNodes()
Dim N As Node
Dim i As Integer
TreeView1.Nodes.Clear
For i = 65 To 90
Set N = TreeView1.Nodes.Add(, , Chr(i), Chr(i))
N.Tag = "*"
Next i
End Sub
Private Sub AddExpanded(ByVal SQLString As String, ByVal Letter As String)
Dim N As Node
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
conn.ConnectionString = myconnstr
conn.Open
Set rs = New Recordset
rs.ActiveConnection = conn
rs.Open SQLString
Do While Not rs.EOF
Set N = TreeView1.Nodes.Add(Letter, tvwChild, , rs(Campo).Value)
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
End Sub
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
AddBasicNodes
AddExpanded "Select * from Banco where Nome like '" & Node.Text & "*';", Node.Text
End Sub
Tópico encerrado , respostas não são mais permitidas