ASP .NET - Treeview :  Abrindo arquivos  (C#)


Neste tutorial veremos como usar o controle TreeView para abrir arquivos a partir de um navegador usando a linguagem C#.

Já escrevi muitos artigos abordando o componente GridView da ASP .NET, e, embora não ele seja perfeito, ele pode ser usado de diversas formas para exibir dados e criar uma interface com o usuário mais amigável.

Lembrando que a ASP .NET Web Forms é uma tecnologia que já deu o que tinha para dar, restando agora um grande legado que vai existir por muitos anos. Por isso continuo a escrever sobre ASP .NET Web Forms.

Voltando ao controle TreeView, ele é muito versátil, de forma que podemos atribuir uma variedade de fontes de de informações a ela para que possamos exibí-las em uma estrutura hierárquica.

Neste tutorial vamos usar o controle TreeView para exibir o diretório de um web site e permitir que o usuário clique em um arquivo e ele seja aberto no navegador.

Criando o projeto ASP .NET Web Forms e incluindo a página Default.aspx

Abra o VS Community 2017 e clique em New Project;

Selecione a linguagem Visual C# -> WEB -> ASP .NET Web Aplication (.NET Framework), Informe o nome Aspnet_TvArquivos e clique no botão OK;

A seguir selecione o template Empty e marque Web Forms, sem autenticação nem hospedagem na nuvem e clique em OK;

Vamos incluir uma página web no projeto.

No menu Project clique em Add New Item;

Selecione o template Web e a seguir Web Form e informe o nome Default.aspx e clique em Add;

Agora via menu Project clique em New Folder e crie uma pasta chamada Arquivos na raiz do projeto e inclua alguns arquivos textos e de imagens nesta pasta.

Definindo o GridView na página Default.aspx

Abra a página Default.aspx e a partir da ToolBox inclua um controle TreeView na página definindo sua configuração conforme mostrado a seguir:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Aspnet_TvArquivos.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>TreeView</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:TreeView ID="Tv1" runat="server" OnTreeNodePopulate="Tv1_TreeNodePopulate" AutoGenerateDataBindings="False" ExpandDepth=0 >
              <Nodes>
                 <asp:TreeNode Value="C:" Text="Arquivos" SelectAction="Select" PopulateOnDemand="true"></asp:TreeNode>
              </Nodes>
          </asp:TreeView>
        </div>
    </form>
</body>
</html>

Neste código definimos um controle TreeView com as seguintes características:

A seguir abra o arquivo Default.aspx.cs e defina o seguinte código no code-behind:

using System;
using System.IO;
using System.Web.UI.WebControls;
namespace Aspnet_TvArquivos
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                Tv1.Nodes[0].Value = Server.MapPath("Arquivos");
            }
        }
        protected void Tv1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
        {
            if (IsCallback == true)
            {
                if (e.Node.ChildNodes.Count == 0)
                {
                    LoadChildNode(e.Node);
                }
            }
        }
        private void LoadChildNode(TreeNode node)
        {
            DirectoryInfo directory = null;
            directory = new DirectoryInfo(node.Value);
            foreach (DirectoryInfo subtree in directory.GetDirectories())
            {
                TreeNode subNode = new TreeNode(subtree.Name);
                subNode.Value = subtree.FullName;
                try
                {
                    if (subtree.GetDirectories().Length > 0 | subtree.GetFiles().Length > 0)
                    {
                        subNode.SelectAction = TreeNodeSelectAction.SelectExpand;
                        subNode.PopulateOnDemand = true;
                        subNode.NavigateUrl = "#";
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                node.ChildNodes.Add(subNode);
            }
            foreach (FileInfo fi in directory.GetFiles())
            {
                TreeNode subNode = new TreeNode(fi.Name);
                node.ChildNodes.Add(subNode);
                subNode.NavigateUrl = "Arquivos/" + fi.Name.ToString();
                //subNode.NavigateUrl = Server.MapPath(fi.Name.ToString());
            }
        }
    }
}

Neste código definimos o evento Load  onde carregamos os nomes dos arquivos na pasta Arquivos do projeto.

Executando o projeto iremos obter o seguinte resultado:

A clicar em um arquivo o mesmo será aberto e exibido no navegador:

Pegue o projeto completo aqui :  Aspnet_TvArquivos.zip (sem as referências)

Está alguém entre vós aflito? Ore. Está alguém contente? Cante louvores. Tiago 5:13

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti