请教个treeview无限级的问题

mylovefly001 2012-11-29 10:53:28
现在有一组List<string>格式数据,暂且命名为A。数据内容如下(不固定数量,而且顺序是乱的):



编号0:0区:第0小学:0年级:0班

编号1:0区:第0小学:0年级:1班

编号3:0区:第0小学:0年级:2班

编号0:0区:第0小学:0年级:3班

编号5:0区:第0小学:0年级:4班

编号0:0区:第0小学:0年级:5班

编号2:0区:第0小学:1年级:0班

编号4:0区:第0小学:1年级:0班

...(若干)

编号0:1区:第0小学:1年级:0班

...(若干)

编号5:0区:第0小学:1年级:0班

...(若干)

现在想把绑定到treeview上面,想要的树格式如下图(这图中的绑定是我写死的,我想要根据内容动态生成):



求哪位高手给个思路,,谢谢。。。
...全文
150 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
闪耀的瞬间 2012-11-29
  • 打赏
  • 举报
回复
引用 1 楼 happy09li 的回复:
C# code?1234567891011121314151617181920212223242526272829递归绑定 private void bindTreeView3() { string sql = "select * from table"; DataTable dt = db.ExecuteDat……
就是这个递归。。但是数据多就加载的比较慢,,,可以一层一层的加载。就是点击这个节点,查找这个节点下面的子节点,然后加载出来。这样就不是一次性加载全部的数据,很快。。
mylovefly001 2012-11-29
  • 打赏
  • 举报
回复
引用 楼主 mylovefly001 的回复:
现在有一组List<string>格式数据,暂且命名为A。数据内容如下(不固定数量,而且顺序是乱的): 编号0:0区:第0小学:0年级:0班 编号1:0区:第0小学:0年级:1班 编号3:0区:第0小学:0年级:2班 编号0:0区:第0小学:0年级:3班 编号5:0区:第0小学:0年级:4班 编号0:0区:第0小学:0年级:5……
刚才说错了。数据格式是这样的(也就是有的只到年级,有的到班,但没有年级,每条的是不等的):


编号0:0区:第0小学:0年级:0班

 编号1:0区:第0小学:0年级:1班

 编号3:0区:第0小学:0年级:2班

 编号0:0区:第0小学:0年级:3班

 编号5:0区:第0小学:4班

 编号0:0区:第0小学:0年级:5班

 编号2:0区:第0小学:1年级:0班

 编号4:0区:第0小学:1年级

...(若干)

编号0:1区:第0小学:0班

...(若干)

编号5:0区:第0小学:1年级:0班

...(若干)

  • 打赏
  • 举报
回复
你这个需求可以用parent方式存储在数据库里。 字段有:编号、区、小学、年级、班。通过递归绑定即可。 你看下《数据结构与算法》。
熙风 2012-11-29
  • 打赏
  • 举报
回复
递归绑定

 private void bindTreeView3()
        {
            string sql = "select * from table";
            DataTable dt = db.ExecuteDataTable(sql, CommandType.Text, null);
            DataRow[] dr = dt.Select("thelevel='0'");
            for (int i = 0; i < dr.Length; i++)
            {
                TreeNode tn = new TreeNode();
                tn.Text = dr[i]["name"].ToString();
                tn.Tag = dr[i]["id"].ToString();
                FillTree3(tn, dt);
                treeView3.Nodes.Add(tn);
            }
        }

        private void FillTree3(TreeNode tnn, DataTable dt)
        {
            DataRow[] dr = dt.Select("paraid='" + tnn.Tag.ToString() + "'");
            for (int i = 0; i < dr.Length; i++)
            {
                TreeNode tn = new TreeNode();
                tn.Text = dr[i]["name"].ToString();
                tn.Tag = dr[i]["id"].ToString();
                FillTree3(tn, dt);
                tnn.Nodes.Add(tn);
            }
        }
jshi123 2012-11-29
  • 打赏
  • 举报
回复

	private void Form1_Load(object sender, EventArgs e)
	{
		var a = new List<string>
			{
				"编号0:0区:第0小学:0年级:0班",
				"编号1:0区:第0小学:0年级:1班",
				"编号3:0区:第0小学:0年级:2班",
				"编号0:0区:第0小学:0年级:3班",
				"编号5:0区:第0小学:4班",
				"编号0:0区:第0小学:0年级:5班",
				"编号2:0区:第0小学:1年级:0班",
				"编号4:0区:第0小学:1年级",
				//...(若干)
				"编号0:1区:第0小学:0班",
				//...(若干)
				"编号5:0区:第0小学:1年级:0班",
				//...(若干)
			};

		var pattern = @"(编号\d+):(\d+区):(第\d+小学)(?::(\d+年级))?(?::(\d+班))?";
		var q = a.Select(x => Regex.Match(x, pattern));

		Func<int, Func<Match, string>> keys = i => m => m.Groups[i].Value;
		Func<int, string, List<Match>, TreeNode> createNode = null;
		createNode = (i, name, list) =>
		{
			var node = new TreeNode(name);
			if (list.Count > 1)
			{
				var children = list.GroupBy(keys(i)).Select(x => createNode(i + 1, x.Key, x.ToList()));
				node.Nodes.AddRange(children.ToArray());
			}
			return node;
		};

		var root = createNode(1, "", q.ToList());
		this.treeView1.Nodes.AddRange(root.Nodes.OfType<TreeNode>().ToArray());
	}

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧