当前位置:编程学习 > C#/ASP.NET >>

分享下自己写的树状城市结构图~

先来个效果图..

如果要查询中国有什么城市


如果要查询广东有什么城市



类似这样的东西,曹版主也写过一篇相关的文章 http://bbs.csdn.net/topics/390300855

那我为啥还要写呢?因为曹版主的一篇算法擂台..让我对这些树状结构产生了兴趣..

但对于我这些培训了半年就出来工作的人来说..很难去写出那样的东西..但因为喜爱..还是把头埋了下去弄..因为版主写的那个树状图..又linq..又IEnumerable..都是些没见过的东西..我打开后没2秒就关了(我想了解了那些再去看)..



废话扯多了..我们来看看这个菜鸟版的树状城市结构图咋弄的..





using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.Text.RegularExpressions;

namespace MyWeb
{
    
    public partial class WebForm4 : System.Web.UI.Page
    {

        public class Node
        {

            public Node()
            {
                Next = new List<Node>();
            }

            private List<Node> _next;
            internal List<Node> Next
            {
                get { return _next; }
                set { _next = value; }
            }

            private int _id;
            public int Id
            {
                get { return _id; }
                set { _id = value; }
            }

            private int _pid;
            public int Pid
            {
                get { return _pid; }
                set { _pid = value; }
            }

            private string _name;
            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }
        }

        public class ReadNode
        {
            //关键就在于ReadNodeForId和Setplace

            //ReadNodeForId会一直往下读,并且写入noderesult的节点中..

            //而每次写入之前..要判断下当前是在哪个节点..

            private static List<Node> noderesult = new List<Node>();
            private static List<Node> nodetemp = noderesult;    
            private List<Node> node_list;
            private int city_id;

            public List<Node> ReadNodeForId(int id, List<Node> list)
            {
                
                noderesult.Clear();
                nodetemp.Clear();
                node_list = list;
                city_id = id;
                Read(city_id);
                return noderesult;
            }

            public void Read(int id)
            {
                foreach (Node root in node_list)
                {
                    if (root.Pid == id)
                    {
                        SetPlace(root.Pid, noderesult);
                        nodetemp.Add(root);
                        Read(root.Id);
                    }
                }
            }


           
            public void SetPlace(int id, List<Node> temp)
            {
                
                if (city_id == id)
                {
                    nodetemp = noderesult;
                }
                else
                {
                    foreach (Node root in temp)
                    {
                        if (root.Id == id)
                        {
                            nodetemp = root.Next;
                            break;
                        }
                        else
                        {
                            SetPlace(id, root.Next);
                        }
                    }
                }
            }

            

        }


        Label label = new Label();
        List<Node> listforui;

        //初始化数据
        public void init()
        {
            string city = @"id=10,pid=1,name=深圳市
                            id=1,pid=0,name=广东省
                            id=2,pid=1,name=广州市
                            id=3,pid=1,name=佛山市
                            id=9,pid=3,name=狮山区
                            id=4,pid=0,name=湖南省
                            id=5,pid=4,name=岳阳市
                            id=6,pid=4,name=长沙市
                            id=7,pid=2,name=越秀区
                            id=8,pid=7,name=矿泉街
                            id=9,pid=0,name=江苏省
                            id=10,pid=0,name=四川省
                            id=11,pid=2,name=荔湾区
                            id=12,pid=2,name=东山区
                            id=13,pid=4,name=常德市
                            id=14,pid=10,name=成都市
                            id=15,pid=9,name=南京市";
            MatchCollection mc = Regex.Matches(Regex.Replace(city, "[\r\n ]", ""), @"id=(\d+),pid=(\d+),name=([^i]+)");
            listforui = new List<Node>();
            foreach (Match match in mc)
            {
                Node node_temp = new Node();
                node_temp.Id = Convert.ToInt32(match.Groups[1].Value);
                node_temp.Pid = Convert.ToInt32(match.Groups[2].Value);
                node_temp.Name = match.Groups[3].Value;
                listforui.Add(node_temp);
            }

        }

        //用于显示
        public void Bind(List<Node> list, int index)
        {
            Boolean boolean = false;
            foreach (Node node in list)
            {
                if (boolean & index != 0)
                {
                    string kongge = "";
                    for (int i = 0; i < index * 7; i++)
                    {
                        kongge += " ";
                    }
                    label.Text += "<br/> " + kongge + "-" + node.Name;
                }
                else if (index == 0)
                {
                    label.Text += "<br/> -" + node.Name;
                }
                else
                {
                    label.Text += "-" + node.Name;
                    boolean = true;
                }
                if (node.Next.Count != 0)
                {
                    int temp = index + 1;
                    Bind(node.Next, temp);
                }
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            init();
            int id = 0;//设置要查询的地方的id
            listforui = new ReadNode().ReadNodeForId(id, listforui);
            Bind(listforui, 0);
            HtmlForm form = new HtmlForm();
            form.ID = "form1";
            Page.Controls.Add(form);
            Page.FindControl("form1").Controls.Add(label);
        }

    }

}




--------------------编程问答-------------------- 因为测试时狮山区和江苏省的id都为9..所以结果没问题的 --------------------编程问答-------------------- 写得很辛苦 --------------------编程问答-------------------- 沙发竟然占了,可恶~~~ --------------------编程问答-------------------- 是呀,你放在一个数组里不就行了吗?那样苦的写呀! --------------------编程问答-------------------- 支持下,接分
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,