2012-02-14 3 views
1

Я хочу перечислить файлы на TreeView, и если я нажимаю на TreeNode (файл), то этот файл будет загружен:как нажать на treeviewnode для загрузки файла

<asp:TreeView Id="MyTree" 
         PathSeparator = "|" 
         OnTreeNodePopulate="PopulateNode" 
         ExpandDepth="0" 
         runat="server" ImageSet="XPDirectoryListing" NodeIndent="15"> 

      <SelectedNodeStyle BackColor="#B5B5B5"></SelectedNodeStyle> 
      <NodeStyle VerticalPadding="2" Font-Names="Tahoma" Font-Size="8pt" HorizontalPadding="2" ForeColor="#000000"></NodeStyle> 
      <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA"></HoverNodeStyle> 

      <Nodes> 
       <asp:TreeNode Text="Demos" PopulateOnDemand="True" Value="Demos" /> 
      </Nodes> 

     </asp:TreeView> 

И код-за:

public partial class DirectoryListing : System.Web.UI.Page 
{ 
    protected void PopulateNode(Object source, TreeNodeEventArgs e) 
    { 
     TreeNode node = e.Node; 

     if (e.Node.Value == "Demos") 
     { 
      e.Node.Value = Server.MapPath("~/"); 
     } 

     String[] dirs = Directory.GetDirectories(node.Value); 

     // Enumerate directories 
     foreach (String dir in dirs) 
     { 
      TreeNode newNode = new TreeNode(Path.GetFileName(dir), dir); 

      if (Directory.GetFiles(dir).Length > 0 || Directory.GetDirectories(dir).Length > 0) 
      { 
       newNode.PopulateOnDemand = true; 
      } 

      node.ChildNodes.Add(newNode); 
     } 

     // Enumerate files 
     String[] files = Directory.GetFiles(node.Value); 

     foreach (String file in files) 
     { 
      TreeNode newNode = new TreeNode(Path.GetFileName(file), file); 
      node.ChildNodes.Add(newNode); 
     } 
    } 
} 

Как я могу изменить его таким образом, что я нажимаю на TreeNode, файл в TreeNode будет загружен.

Заранее спасибо.

ответ

2

Если ваше приложение приложение интрасети, то это может работать:

TreeNode newNode = new TreeNode(Path.GetFileName(file), file); 
      newNode.SelectAction = TreeNodeSelectAction.Select; 
      newNode.NavigateUrl = Path.GetFullPath(file); 
      node.ChildNodes.Add(newNode); 

Если это не приложение интрасети можно зацепить к событию selectedNodeChanged на TreeView и использовать файл стример поток файла для клиента. Но вы, скорее всего, должны указать тип MIME файла в зависимости от того, какие файлы вы планируете отправлять.

+0

нет, это не интернет-приложение. – olidev

+0

ОК, так что это не интернет-приложение? Тогда приведенный выше код может работать, если пользователь имеет права доступа к пути к файлу. Если у пользователя нет доступа, вам нужно либо предоставить им доступ, либо использовать файловый стример, чтобы обслуживать файл для пользователя. – cfs

0

Я бы использовал jquery, чтобы превратить узлы дерева в ссылки. После того, как у вас есть ссылка захватить событие onclick javascript и в этом случае добавить iframe на страницу с адресом файла. Это приведет к загрузке файла.

+0

потому что местоположение настраивается в коде, поэтому я не думаю, что использование JQuery - хороший подход? – olidev

+0

Как только информация попадет на клиента, вы больше не настраиваете его. Вы можете предоставить клиенту достаточно информации, чтобы вы могли использовать javascript для создания ссылок, которые будут загружать ваши файлы. Я думаю, что решение выше было бы больше по вашему вкусу. –

 Смежные вопросы

  • Нет связанных вопросов^_^