NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalTutoriaisLanodecastro : Listadados002
Quer receber novidades e e-books gratuitos?

FILTRO DE TUTORIAIS:


Lista de Dados com Subitens – Parte II

 

Olá pessoal,

 

Dando continuidade ao nosso tutorial, peço que abra o arquivo ListaDeProdutos.aspx. Clique no botão ViewCode.

 

Iremos criar primeiramente o código que monta a lista de categorias. Como usaremos o banco de dados Northwind do SQL Server, devemos importar o Namespace System.Data.SqlClient e também o namespace System.Data, pois, utilizaremos o objeto DataTable.

 

Imports System.Data.SqlClient

Imports System.Data

 

Vamos criar a conexão com o banco de dados, que será com o escopo público, uma vez que utilizaremos esta mesma conexão para mais de uma consulta ao banco de dados.

 

Public sqlConn As New SqlConnection("Initial Catalog=Northwind;Data Source=Servidor;user id=SeuLogin;pwd=SuaSenha")

 

Não esqueça de fazer as devidas configurações nas string de conexão.

 

Agora digite o código abaixo, que conecta ao banco de dados e monta a lista de categorias.

 

Private Sub MontaCategorias()

        'Cria o adaptador de dados, selecionando os dados da tabela categorias

        Dim sqlAdp As New SqlDataAdapter("Select CategoryID,CategoryName from Categories", sqlConn)

        'Cria a tabela virtual de dados

        Dim dt As New DataTable

        'Preencha a tabela com os dados da consulta

        sqlAdp.Fill(dt)

        'Anexa a chave-primária da consulta ao DataList

        dlCategorias.DataKeyField = "CategoryId"

        'Indica a fonte de dados

        dlCategorias.DataSource = dt

        'Renderiza o controle

        dlCategorias.DataBind()

 

    End Sub

 

Chame este método no Page_Load:

 

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        If Not Page.IsPostBack Then

            MontaCategorias()

        End If

    End Sub

 

Façamos um teste, rode a aplicação:

 

 

Isto quer dizer que o código funcionou.

 

Agora, vamos listar os subitens, que são os produtos de cada categoria.

 

Usaremos o evento ItemCreated do DataList dlCategorias para gerar os subitens, isto, porque será gerado durante o momento da criação do DataList. Digite o código conforme abaixo:

 

    Private Sub dlCategorias_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles dlCategorias.ItemCreated

        Dim x As Integer

        'Interage com todos os itens do datalist para poder percorrer a cada índice da chave-primária

        For x = 0 To dlCategorias.Items.Count

            Dim sqlAdp As New SqlDataAdapter("Select ProductName from Products where CategoryID=" & dlCategorias.DataKeys(x) & "", sqlConn)

            'Cria a tabela virtual de dados

            Dim dt As New DataTable

            'Preencha a tabela com os dados da consulta

            sqlAdp.Fill(dt)

 

            'Cria a instância do objeto DataGrid

            Dim dgItems As DataGrid

            'Indica que o Datagrid criado acima será o que está dentro do dlCategorias

            dgItems = e.Item.FindControl("dgItems")

 

            'Indica a fonte de dados

            dgItems.DataSource = dt

            'Renderiza o Datagrid

            dgItems.DataBind()

        Next

    End Sub

 

Uma breve explicação sobre o código acima:

 

Utilizamos a instrução de repetição For, para interagir com os itens do DataList. Uma vez que este itens não estão selecionados, deve se utilizar esta forma para poder percorrer todas os índices de chave-primária. Vejam que mais a frente utilizei a variável x como índice de chave-primária a cada vez que a consulta era executada:

 

Dim sqlAdp As New SqlDataAdapter("Select ProductName from Products where CategoryID=" & dlCategorias.DataKeys(x) & "", sqlConn)

 

Mais abaixo, foi necessário criar uma instância do objeto DataGrid para armazenar o DataGrid que está dentro do DataList.

 

            Dim dgItems As DataGrid

            'Indica que o Datagrid criado acima será o que está dentro do dlCategorias

            dgItems = e.Item.FindControl("dgItems")

 

Isto foi necessário porque não é possível obter as propriedades e métodos deste DataGrid diretamente, pois, está vinculado a outro controle. Para vincular este DataGrid a novo DataGrid criado, utilizamos o método FindControl, que deve-se passar o nome do controle a ser localizado.

 

Creio que estas explicações deram uma clareada em vossas mentes, não?

 

Vamos testar a aplicação:

 

 

 

Vejam que ficou ótimo, mas pode ficar um pouquinho melhor se adicionarmos rolagem a esta lista.

 

Vá a ToolBox e adicione um Panel, e faça os ajustes de tamanho como desejar.

 

 

Apague seu conteúdo, e vá até a guia HTML.

 

Localize o código-fonte que gera o Panel1.

 

Adicione o seguinte trecho ao atributo Style:

 

OVERFLOW=auto

 

Veja a linha completa do código HTML:

 

<asp:Panel id="Panel1" style="OVERFLOW=auto;Z-INDEX: 102; LEFT: 344px; POSITION: absolute; TOP: 32px" runat="server"    Width="288px" Height="320px">Panel</asp:Panel>

 

Ok, agora volte a guia Design e arraste o DataList para dentro do Panel.

 

 

Faça os devidos ajustes e execute a aplicação.

 

 

Agora sim, perfeito. Vejam que com pouco código conseguimos uma solução impressionante.

 

 

Espero que tenham gostado, e dúvidas ou sugestões mandem para lanodecastro@hotmail.com

 

Estou aguardando, muitos abraços, e parabéns para mim que completei mais um ano de vida no dia 17 de setembro

 

Lano de Castro

 

Quer receber novidades e e-books gratuitos?

 
 

Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

Todos os direitos reservados, Júlio Battisti 2001-2025 ®

LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO

DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI