首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

分层级的代号怎么用Treeview树化

2013-03-13 
分层级的代号如何用Treeview树化比如,内存表dt中的数据内容及格式是:序号级别代号1.1CS0012..2CSA013..2CS

分层级的代号如何用Treeview树化
比如,内存表dt中的数据内容及格式是:
序号    级别   代号
1       .1     CS001
2      ..2    CSA01
3      ..2    CSB01
4      ...3   CSBA1
5      ...3   CSBB2
6      ....4  CSBBA
7      ...3   CSBD1
8      ..2    CSD02
9      ...3   CSDA1
10     .1     CS010
说明:CSA01 是 CS001 的下级代号,CSB01 与 CSA01 是同级代号,CSBA1 是 CSB01 的下级代号,其他类推。
如此分级别的代号,怎么将这个内存表dt在Treeview中树化起来?
不胜感激……
[解决办法]
递归绑定就可以了。但你dt里面的结构少了一项就是“上级序号(或id)”,假如表中的话可以直接读出。如没有的话感觉这样设计有点蛋疼了。
[解决办法]
http://www.cnblogs.com/SunYu/archive/2010/04/29/1724367.html
[解决办法]
只要你能解释为什么CSA01是CS001的下级代号而不是CS010的下级,那么这个问题就很简单了。
你要做的无非就是把你的解释写成代码罢了。你就可以遍历,搜索,查找上下级关系。

当然,之所以那么繁琐,是因为你的数据结构很蛋疼。
[解决办法]

引用:
恩,具体怎么来操作呢?我对这个树化不是那么精通


写一个给你:
在界面上放一个TreeView,双击窗体空白处,在Form_Load编写如下代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var data = ("0 0 0\r\n" +
@"1       .1     CS001
2      ..2    CSA01
3      ..2    CSB01
4      ...3   CSBA1
5      ...3   CSBB2
6      ....4  CSBBA
7      ...3   CSBD1
8      ..2    CSD02
9      ...3   CSDA1
10     .1     CS010").Split(new string[] { "\r\n" }, StringSplitOptions.None)
                    .Select(x => x.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
                    .Select(x => new { id = x[0], level = int.Parse(x[1].TrimStart('.')), text = x[2] });


            Stack<TreeNode> stack = new Stack<TreeNode>();
            TreeNode root = new TreeNode("root");
            stack.Push(root);
            treeView1.Nodes.Add(root);
            foreach (var item in data.Skip(1).Zip(data.Take(data.Count() - 1), (cur, pre) => new { cur, pre }))
            {
                TreeNode tn = new TreeNode(item.cur.text);
                TreeNode node = null;
                for (int i = 0; i <= item.pre.level - item.cur.level; i++)
                    stack.Pop();                        
                node = stack.Peek();
                node.Nodes.Add(tn);
                stack.Push(tn);                
            }
        }
    }
}

热点排行