VB 2005  - Carregando um TreeView com um arquivo CSV


Em diversos  artigos do site eu já abordei o controle TreeView. Se você pretende saber mais sobre este controle veja a relação abaixo:

O controle TreeView exibe uma coleção de itens maneira hierárquica como o Explorer do Windows:  Dependendo do seu projeto pode ser interessante usar os recursos deste controle.

O controle TreeView faz parte da seguinte hierarquia de classes:

Algumas características básicas do TreeView:

Novidades no VB 2005

No VB 2005 houve pequenas mudanças no controle TreeView. A seguir algumas delas:

Tentando trazer algo que eu ainda não mostrei neste artigo vou abordar como você pode carregar um controle TreeView com o conteúdo do arquivo CSV.

O que é um arquivo CSV

Um arquivo CSV (Comma Separted Value) é um formato de arquivo que é frequentemente usado para troca de dados entre aplicações diferentes. O arquivo no formato CSV possui os dados delimitados onde os campos são separados pelo caractere vírgula e registros separados por uma nova linha. Este formato de arquivo é usado no Microsoft Excel ,e tornou-se um pseudo padrão para a indústria mesmo entre plataformas não Microsoft.

Embora não exista uma especificação formal para o formato CSV, a RFC 4180 descreve um formato comum e estabelece o tipo MIME "text/csv" .

Para o propósito deste artigo eu vou criar um arquivo no formato CSV usando o Excel. O arquivo teste.csv possui os seguintes dados:

Abra o Visual Basic Express e crie um novo projeto chamado treeViewVB2005 e no formulário padrão inclua um controle TreeView , um controle Button , um controle Label e um controle TextBox conforme leiauto abaixo:

Nome usado para os controles:
  • TreeView - trvItem
  • TextBox - txtArqCSV
  • Button - btnTrv

Propriedades do controle TreeView:

  • LineColor = Azul

 

Copie o arquivo teste.csv para a pasta bin do projeto.

No evento Click do botão de comando inclua o seguinte código:

 Private Sub btnTrv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTrv.Click
        'define o nome do caminho e o nome do arquivo
        Dim nome_arquivo As String = Application.StartupPath
        'inclui o nome do arquivo ao caminho
        nome_arquivo = nome_arquivo.Substring(0, nome_arquivo.LastIndexOf("\")) & "\" & txtArqCSV.Text
        Try
          'chama a rotina para carregar o treeview
           carregaTreeView(nome_arquivo, trvItems)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

A rotina carregaTreeView que abre o arquivo CSV e chama a rotina montaTreeView para carregar o conteúdo do arquivo no controle:

   ' Carrega o treeview a partir de um arquivo CSV
    Private Sub carregaTreeView(ByVal nome_arquivo As String, ByVal trv As TreeView)
        Dim leitor_stream As StreamReader
        Dim arquivo_conteudo As String = ""
        Try
            ' carrega o arquivo CSV
            leitor_stream = New StreamReader(nome_arquivo)
            arquivo_conteudo = leitor_stream.ReadToEnd()
            leitor_stream.Close()
        Catch ex As FileNotFoundException
            Throw New Exception("arquivo CSV não localizado.")
        Catch ex1 As Exception
            Throw New Exception("Erro ao abrir/ler o arquivo CSV.")
        End Try

        ' quebra o arquivo em linhas
        Const charCR As Char = CChar(vbCr)
        Dim linhas() As String = arquivo_conteudo.Split(charCR)

        ' Processa as linhas.
        trv.Nodes.Clear()
        Dim novos_campos() As String
        For i As Integer = 0 To linhas.GetUpperBound(0)
            ' Verifica se a linha não esta em branco
            If linhas(i).TrimStart.Length > 0 Then
                ' quebra a linha em campos
                novos_campos = linhas(i).Trim.Split(","c)
                ' cria a entrada no treeview
                montaTreeView(trv.Nodes, novos_campos, 0)
            End If
        Next i
    End Sub

A rotina montaTreeView recebe os dados do arquivo e monta o TreeView com os dados:

   ' Monta o treeview usando o CSV
    Private Sub montaTreeView(ByVal no_pai As TreeNodeCollection, ByVal fields() As String, ByVal campo_num As Integer)

        ' sai se todos os campos foram usados
        If campo_num > fields.GetUpperBound(0) Then Exit Sub

        ' Procura o por um no filho com um campo com este nome
        Dim achou_campo As Boolean
        'percorre cada nó filho no nó Pai
        For Each child_node As TreeNode In no_pai
            If child_node.Text = fields(campo_num) Then
                ' Se encontrar então monta
                montaTreeView(child_node.Nodes, fields, campo_num + 1)
                achou_campo = True
            End If
        Next child_node

        ' Verifica se o campo foi encontrado
        If Not achou_campo Then
            ' O campo não foi encontrado vamos criar um
            Dim new_node As TreeNode = no_pai.Add(fields(campo_num))
            new_node.EnsureVisible()

            ' cria o resto do caminho
            montaTreeView(new_node.Nodes, fields, campo_num + 1)
        End If
    End Sub

 

Ao executar o projeto usando o arquivo teste.csv obtemos o seguinte resultado:

 

 

Eu sei é apenas VB.NET mas eu gosto...

 

referências:


José Carlos Macoratti