Создать древовидную структуру c # asp.net - развернуть все узлы - PullRequest
0 голосов
/ 20 февраля 2012

У меня возникают проблемы при попытке построения дерева с использованием asp.net и c #.

В результате я пытаюсь отобразить древовидную структуру следующим образом (извините за неправильное написание или неправильное местоположение, но это только тестовые данные):

UK 
   -> London
     -> SouthEast
        ->Kent
        ->Essex
     -> NorthEast
        ->Cambridge
Wales
   -> Cardiff

Вот мой код ниже:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1"
    ValidateRequest="false" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:TreeView ID="TreeView1" runat="server" >
                </asp:TreeView>
    </form>
</body>
</html>

C #:

using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using System.Collections.ObjectModel;

namespace WebApplication1
{  
    public partial class WebForm1 : System.Web.UI.Page
    {
        public class ViewModel
        {           
            public string LocationName { get; set; }           
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            ICollection<ViewModel> list = new Collection<ViewModel>();
            list.Add(new ViewModel { LocationName = "UK" });
            list.Add(new ViewModel { LocationName = "UK.London.SouthEast.Kent" });
            list.Add(new ViewModel { LocationName = "UK.London.SouthEast.Essex" });
            list.Add(new ViewModel { LocationName = "Wales.Cardiff" });
            list.Add(new ViewModel { LocationName = "Wales" });
            list.Add(new ViewModel { LocationName = "UK.London.NorthEast.Cambridge" });

            PopulateTreeview(list);
        }

        private void PopulateTreeview(ICollection<ViewModel> listOfCities)
        {
            foreach (ViewModel vm in listOfCities)
            {
                    TreeNode tnNode = new TreeNode();
                    tnNode.Text = vm.LocationName;
                    tnNode.Value = vm.LocationName;                    
                    tnNode.Expanded = true;                   
                    TreeView1.Nodes.Add(tnNode);                
            }
        }
    }
}

Как вы можете видеть, мои тестовые данные в этом формате "UK.London.SouthEast.Essex". Я получу эти данные из БД. Мне нужно построить родительский узел и дочерние узлы, используя эти данные, но не знаете как? Несколько дней пытался написать, как это сделать.

1 Ответ

2 голосов
/ 20 февраля 2012

Вы заполняете TreeView, как если бы он был списком.Вам нужно будет указать иерархию, чтобы правильно заполнить дерево ...

Посмотрите: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.treenode.childnodes.aspx

Каждый узел должен быть добавлен со своими соответствующими дочерними элементами.Вы, с другой стороны, указываете, что все узлы должны быть помещены под «корень».

...