Tree控件父类下有很多个子类,而子类下又有孙类,孙类下又有孙孙类.就是说,父类下有多少级子类是不定的.那数据库字段怎么设计?[SQL Server 数据库]

解决方案 »

  1.   

    CREATE TABLE [XXXX](
    [Id] [smallint] IDENTITY(1,1) NOT NULL,
    [Layer] [varchar](1000) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [Name] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
     CONSTRAINT [PK_DEF_ProductCategory] PRIMARY KEY CLUSTERED 
    (
    [Id] ASC
    )--WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]出来的格式是
    id    Layer   Name
    2 2, 名称1
    3 3, 名称2
    4 4, 名称3
    5       2,5     名称5--该项是 名称1的子项
    6       2,5,6     名称6--该项是 名称1的子项下 名称5的子项这样的设计好在能用模糊查询
    当点击父类时能列出对应它下面的项,无论是多少层的
      

  2.   

    t_id    parent_id      t_name
    接点id  上一级接点id    接点名称
    以树型结构显示时,通过递归即可.
      

  3.   

    id    Layer  Name 
    2      2, 名称1 
    3      3, 名称2 
    4      4, 名称3 
    5      2,5    名称5--该项是 名称1的子项 
    6      2,5,6    名称6--该项是 名称1的子项下 名称5的子项 这样的设计好在能用模糊查询 
    当点击父类时能列出对应它下面的项,无论是多少层的 
    提交后移位了 重发
      

  4.   

    核心列如下:
    nodeID            ------------节点标识parentNodeID      ------------父节点标识,如果是根节点为空nodeName          ------------节点名称groupID           ------------树分组标识(这样可以在表中定义多棵树,而只需指定组号即可,根据组号找出无父节点的根节点,然后递归下去即可).....
      

  5.   

    id
    parent_id
    classname
    .
    .
    .
    id格式 *_*_*_*
    *用数字或字母代替
    第一级类用 *
    第二级用*_*
    这样只需要查询id长度即可知道是否有子类。一张表搞定
      

  6.   

    id    Layer    Name 
    2      2,      名称1 
    3      3,      名称2 
    4      4,      名称3 
    5      2,5     名称5--该项是 名称1的子项 
    6      2,5,6   名称6--该项是 名称1的子项下 名称5的子项 
    这样写的话,那Tree控件怎么用代码show出来?
      

  7.   

    先读出第一层的节点tree.Nodes[0].Nodes.Clear();
    //下面步骤只是取出第一层的树节点
                DataTable table = ListUtility.ConvertToDataTable(ServiceProvider.ProductCategoryService.Search());            for (int i = 0; i < table.Rows.Count; i++)
                {
                    string[] ling = table.Rows[i]["Layer"].ToString().Split(',');
                    if (ling.Length == 2)
                    {
                        TreeNode tn = new TreeNode();
                        tn.Text = table.Rows[i]["name"].ToString();
                        tn.Tag = table.Rows[i]["Layer"];
                        tree.Nodes[0].Nodes.Add(tn);
                        table.Rows.RemoveAt(i);
                        i--;
                    }
                }然后用boo控制循环(确保值读出后结束循环)bool boo = true;
                while (boo)
                {
                    for (int i = 0; i < table.Rows.Count; i++)
                    {
                        if (digui(tree.Nodes[0], table.Rows[i]))
                        {
                            table.Rows.RemoveAt(i);
                            i--;
                        }
                        if (table.Rows.Count == 0)
                        {
                            boo = false;
                            break;
                        }
                    }
                    if (table.Rows.Count == 0)
                    {
                        boo = false;
                        break;
                    }
                }
                tree.ExpandAll();主要的方法体        /// <summary>
            /// 递归拿值
            /// </summary>
            private bool digui(TreeNode node, DataRow p)
            {
                TreeNode tn;
                foreach (TreeNode no in node.Nodes)
                {
                    string[] shuzu = no.Tag.ToString().Split(',');                string[] shuzu2 = p["layer"].ToString().Split(',');                if (shuzu[shuzu.Length - 2].ToString() == shuzu2[shuzu2.Length - 3].ToString())
                    {
                        tn = new TreeNode();
                        tn.Text = p["name"].ToString();
                        tn.Tag = p["Layer"].ToString();
                        no.Nodes.Add(tn);
                        return true;
                    }
                    else
                    {
                        if (digui(no, p))
                        {
                            return true;
                        }
                    }
                }
                return false;
            } 
    还有用以上方法树默认要有一个跟节点