Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB.NET: Utilizando o controlo Treeview

O controlo Treeview permite mostrar diversos nodes (nós) hierarquicamente, como acontece com o explorador do sistema operativo, e com isso permitir ao utilizador uma forma simples de visualizar ou seleccionar qualquer node.

Para adicionar nodes a uma Treeview, pode-se fazer em design time (utilizando o wizard) ou em run-time (utilizando código). Um exemplo simples de adicionar alguns nodes usando código é o seguinte:


    Dim node1 As TreeNode = Me.TreeView1.Nodes.Add("Fruta")
    node1.Nodes.Add("Laranja")
    node1.Nodes.Add("Maça")
    node1.Nodes.Add("Pessego")

    Dim node2 As TreeNode = Me.TreeView1.Nodes.Add("Bebidas")
    node2.Nodes.Add("Whiskey")
    node2.Nodes.Add("Moscatel")
    node2.Nodes.Add("Vodka")

Isto irá adicionar dois nodes principais (“Fruta” e “Bebidas”), e dentro desses nodes, outros subnodes (designado por child nodes). O resultado será o seguinte:

Mas quando se tem mais informação, não se pode inserir todos os nodes desta forma. É preciso guarda a informação em uma base de dados, ou em outro recurso qualquer, sendo necessário primeiro definir uma estrutura que seja adequada.

Este exemplo de estrutura é a forma mais usada e mais prática de o fazer. Um campo “ID” que é a chave-primária e com auto-numeração (Identity), uma campo designado como “dependencia” que irá fazer referência ao “ID” que queremos, e, finalmente, uma campo para a descrição.

Como se pode ver nos dados, os campos que vão aparecer na raiz têm no campo “dependencia” um 0 (zero). Os outros fazem referência ao ID base.

Mas podemos criar mais níveis hierárquicos na árvore, bastando para isso fazer referência a um “ID” qualquer e esse registo será um child node do ID indicado. Neste caso iremos adicionar algumas marcas de Whiskey.

Para finalizar o código!

É fundamental criar um método recursivo, que irá percorrer todos os itens na lista, e preencher a Treeview.

Eis um exemplo de como se pode fazer:


  Private Const connString As String = _
      "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\myDB.mdf';" & _
      "Integrated Security=True;User Instance=True"

  ''' <summary>
  ''' Preenche recursivamente uma Treeview com  
  ''' informação de uma base de dados SQL
  ''' </summary>
  ''' <param name="dependenciaID">ID do node base</param>
  ''' <param name="childNode">Node anterior</param>
  Sub FillTreeViewNodes(ByVal dependenciaID As Integer, ByVal childNode As TreeNode)

    Try

      Dim SQL As String = _
          "SELECT * FROM produtos WHERE dependencia=@id ORDER BY descricao;"

      ' Ligação à base de dados (SQL)
      Using conn As New SqlConnection(connString)
        conn.Open()

        ' Define o comando e o parameter
        Using command As New SqlCommand(SQL, conn)
          command.Parameters.Add("@id", SqlDbType.Int).Value = dependenciaID

          ' Lê os dados para um SqlDataReader
          Using reader As SqlDataReader = command.ExecuteReader()

            ' Caso tenha resultados
            If reader.HasRows Then
              While reader.Read()

                Dim newNode As TreeNode = Nothing
                Dim desc As String = reader.Item("descricao").ToString()
                Dim actualID As Integer = Integer.Parse(reader.Item("ID").ToString())

                ' Verifica se é o primeiro node
                If childNode Is Nothing Then
                  newNode = New TreeNode(desc)
                  Me.TreeView1.Nodes.Add(newNode)
                Else
                  newNode = childNode.Nodes.Add(desc)
                End If

                ' Chama recursivamente o método com o ID actual
                Call FillTreeViewNodes(actualID, newNode)

              End While
            End If

          End Using 'reader

        End Using 'command

      End Using 'conn

    Catch ex As Exception
      Throw New Exception(ex.Message)
    End Try

  End Sub

Finalmente, para chamar o método criado:


    ' Preenche a Treeview, iniciando nos nodes da raiz
    Call FillTreeViewNodes(0, Nothing)

E este será o resultado:

Este artigo pretende mostrar de uma forma simples como preencher uma Treeview, através de uma função recursiva, e como criar uma estrutura numa base de dados para guardar a informação.

Espero que ajude!


Ebook Gratuito: First Look: Microsoft Office 2010

Por um período limitado, a Microsoft Press oferece este ebook sobre o Microsoft Office 2010: “First Look: Microsoft Office 2010”.

Este ebook, com 14 capítulos, está organizado em três partes:

Parte I - “Envision the Possibilities”
Visão geral sobre o novo Office 2010 e as novas funcionalidades

Parte II - “Hit the Ground Running”
Mostra as novas novas funcionalidades aplicação a aplicação

Parte III - Next Steps with Office 2010
Como o o titulo indica, mostra os próximos passos do Office 2010, referindo questões como segurança e mais recursos disponíveis.

 
O ebook está disponível no blog da Microsoft Press e tem cerca de 10mb e 186 páginas.


NOTICIA: PDC09 - Vídeos


A PDC (Professional Developers Conference), decorreu em Los Angeles de 17 a 19 de Novembro.

O evento já terminou e os vídeos já estão disponíveis!

http://microsoftpdc.com/Videos

Estão são apenas algumas das sessões que considero interessantes, especialmente para para os programadores e interessados em VB:
 


Future Directions for C# and Visual Basic
Luca Bolognese

Code Like the Wind with Microsoft Visual Basic 2010
Lucian Wischik

Microsoft Visual Basic IDE Tips and Tricks
Dustin Campbell

Microsoft ASP.NET MVC 2: The New Stuff
Stephen Walther

Microsoft ASP.NET Futures
Jonathan Carter, Scott Hunter

Mas existem muito mais!


VB.NET: Microsoft Reports – Formatações

Os Microsoft Reports permitem formatar diversas propriedades através da criação de expressões. Estas propriedades têm de ser alteradas desta forma, caso os resultados sejam dinâmicos, uma vez que não é possíveis de o fazer através do código. São diversas propriedades como BackgroundColor, ForeColor, BorderColor, FontFamily, FontStyle, TextAlign, etc, etc.

Tudo junto, e com algum bom gosto, podem-se criar relatórios bastante profissionais e de uma forma relativamente simples.

Quando seleccionamos algumas dessas propriedades, está disponível uma opção para construir uma expressão. Isso indica que é possível alterar essa propriedade de acordo com o resultado de um campo, com o número da linha, ou com outra condição qualquer. O resultado da expressão é uma String.

Depois, no Expression Editor, existem algumas constantes especificas para a propriedade, que escolhemos definir através de uma expressão. Neste caso a propriedade Color.

Finalmente, na expressão, podemos utilizar condições simples ou complexas. Este é um exemplo que verifica se o campo “ID1” tem o valor “AAA” e coloca a cor Gainsboro caso esta expressão seja verdadeira, e White caso seja falsa.

=IIF(Fields!ID1.Value="AAA","Gainsboro", “White")


Com algumas condições e manipulando diferentes propriedades, podemos obter resultados com este, onde um plano anual, tem diferentes cores para diferentes códigos.

Outro exemplo, e também para um plano anual, usando um objecto Table, pode-se seleccionar a TableRow e definir a seguinte expressão:

=IIF(RowNumber(Nothing) MOD 2 = 0,"White","LightBlue")

Isto fará com que as linhas tenham cores alternadas para uma mais fácil distinção.

São alguns exemplos de formatação em Microsoft Reports, que espero que ajudem a melhorar o resultado final dos relatórios.




Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico