Treeview 控件 的递归

盐酸伐地那非 2017-06-14 05:04:20
Dears,

数据库中有一个表,如下图。窗体上有个treeview控件。需要在窗体启动时将数据表中的数据述及据层级载入到控件中。

这个作业实在搞不明白了。各位大神伸出缓手吧~~~


...全文
145 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
盐酸伐地那非 2017-06-15
  • 打赏
  • 举报
回复
非常感谢大神的帮助。
引用 8 楼 Imaor 的回复:

//VB.Net

Public Class Form1
    Public tv As TreeView = New TreeView()
    Public dt As Data.DataTable = New DataTable()
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        dt.Columns.Add("id", System.Type.GetType("System.String"))
        dt.Columns.Add("name", System.Type.GetType("System.String"))
        dt.Columns.Add("pid", System.Type.GetType("System.String"))
        dt.Rows.Add("01", "材料类", "null")
        dt.Rows.Add("02", "工具类", "null")
        dt.Rows.Add("03", "劳保类", "null")
        dt.Rows.Add("0101", "阀门", "01")
        dt.Rows.Add("0102", "钢材", "01")
        dt.Rows.Add("0201", "扳手", "02")
        dt.Rows.Add("020101", "梅花扳手", "0201")
        dt.Rows.Add("020102", "呆扳手", "0201")
        dt.Rows.Add("0301", "手套", "03")
        dt.Rows.Add("0302", "帽子", "03")
        dt.Rows.Add("030101", "线手套", "0301")
        dt.Rows.Add("030201", "安全帽", "0302")
        dt.Rows.Add("030202", "防尘帽", "0302")


        '调整一下位置
        tv.Width = Width / 2    '宽度
        tv.Height = Height / 2  '高度
        tv.Left = (Width - tv.Width) / 2

        '读取root
        Dim i = 0
        Dim drs = dt.Select("pid='null'")
        For i = 0 To drs.Count - 1
            tv.Nodes.Add(GetTreeNode(drs(i)))
        Next


        Controls.Add(tv)
    End Sub
    Public Function GetTreeNode(dr As Data.DataRow) As TreeNode
        Dim node As TreeNode = New TreeNode(dr("name"))

        Dim i = 0
        Dim drs = dt.Select("pid='" + dr("id") + "'")
        For i = 0 To drs.Count - 1
            node.Nodes.Add(GetTreeNode(drs(i)))
        Next

        Return node
    End Function
End Class

IEEE_China 2017-06-15
  • 打赏
  • 举报
回复

//VB.Net

Public Class Form1
    Public tv As TreeView = New TreeView()
    Public dt As Data.DataTable = New DataTable()
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        dt.Columns.Add("id", System.Type.GetType("System.String"))
        dt.Columns.Add("name", System.Type.GetType("System.String"))
        dt.Columns.Add("pid", System.Type.GetType("System.String"))
        dt.Rows.Add("01", "材料类", "null")
        dt.Rows.Add("02", "工具类", "null")
        dt.Rows.Add("03", "劳保类", "null")
        dt.Rows.Add("0101", "阀门", "01")
        dt.Rows.Add("0102", "钢材", "01")
        dt.Rows.Add("0201", "扳手", "02")
        dt.Rows.Add("020101", "梅花扳手", "0201")
        dt.Rows.Add("020102", "呆扳手", "0201")
        dt.Rows.Add("0301", "手套", "03")
        dt.Rows.Add("0302", "帽子", "03")
        dt.Rows.Add("030101", "线手套", "0301")
        dt.Rows.Add("030201", "安全帽", "0302")
        dt.Rows.Add("030202", "防尘帽", "0302")


        '调整一下位置
        tv.Width = Width / 2    '宽度
        tv.Height = Height / 2  '高度
        tv.Left = (Width - tv.Width) / 2

        '读取root
        Dim i = 0
        Dim drs = dt.Select("pid='null'")
        For i = 0 To drs.Count - 1
            tv.Nodes.Add(GetTreeNode(drs(i)))
        Next


        Controls.Add(tv)
    End Sub
    Public Function GetTreeNode(dr As Data.DataRow) As TreeNode
        Dim node As TreeNode = New TreeNode(dr("name"))

        Dim i = 0
        Dim drs = dt.Select("pid='" + dr("id") + "'")
        For i = 0 To drs.Count - 1
            node.Nodes.Add(GetTreeNode(drs(i)))
        Next

        Return node
    End Function
End Class

盐酸伐地那非 2017-06-15
  • 打赏
  • 举报
回复
引用 6 楼 Imaor 的回复:
[quote=引用 5 楼 Wesker_cui 的回复:] 没人帮我吗~~~~
不是给你写了代码了么[/quote] 大神,我只能看懂vb.net 的。。。。
IEEE_China 2017-06-15
  • 打赏
  • 举报
回复
引用 5 楼 Wesker_cui 的回复:
没人帮我吗~~~~
不是给你写了代码了么
盐酸伐地那非 2017-06-15
  • 打赏
  • 举报
回复
没人帮我吗~~~~
盐酸伐地那非 2017-06-14
  • 打赏
  • 举报
回复
引用 2 楼 Imaor 的回复:

//数据源datatable
  TreeView tv = new TreeView();
        DataTable dt = new DataTable();
        private void Form1_Load(object sender, EventArgs e)
        {
         
           
            dt.Columns.Add("id",typeof(string));
            dt.Columns.Add("name",typeof(string));
            dt.Columns.Add("pid", typeof(string));
            dt.Rows.Add("01", "材料类", "null");
            dt.Rows.Add("02", "工具类", "null");
            dt.Rows.Add("03", "劳保类", "null");
            dt.Rows.Add("0101", "阀门", "01");
            dt.Rows.Add("0102", "钢材", "01");
            dt.Rows.Add("0201", "扳手", "02");
            dt.Rows.Add("020101", "梅花扳手", "0201");
            dt.Rows.Add("020102", "呆扳手", "0201");
            dt.Rows.Add("0301", "手套", "03");
            dt.Rows.Add("0302", "帽子", "03");
            dt.Rows.Add("030101", "线手套", "0301");
            dt.Rows.Add("030201", "安全帽", "0302");
            dt.Rows.Add("030202", "防尘帽", "0302");


            //调整一下位置
            tv.Width = Width/2;//宽度
            tv.Height = Height/2;//高度
            tv.Left = (Width-tv.Width) / 2;

            //读取root
            foreach (DataRow   dr in dt.Select("pid='null'"))
            {
               tv.Nodes.Add( GetTreeNode(dr));
            }

            Controls.Add(tv);
        }
        /// <summary>
        /// 读取child
        /// </summary>
        /// <param name="dr"></param>
        /// <returns></returns>
        protected TreeNode GetTreeNode(DataRow dr)
        {
            TreeNode node = new TreeNode(dr["name"].ToString());
           
            foreach(DataRow drchild in dt.Select(string.Format("pid='{0}'",dr["id"])))
            {
                node.Nodes.Add(GetTreeNode(drchild));
            }
            return node;
        }
这个,这个,细节上真心看不懂。。。好高大上。。。
盐酸伐地那非 2017-06-14
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
sql不多说,就是全抽。treeview控件你如果是新手,就先写循环嵌套,目前也就3层。如果对递归有所了解就用递归写
循环也不会啊,我只会用循环把根节点写进去,子节点怎么根据“PID”字段来确定根节点一直没搞明白
IEEE_China 2017-06-14
  • 打赏
  • 举报
回复

//数据源datatable
  TreeView tv = new TreeView();
        DataTable dt = new DataTable();
        private void Form1_Load(object sender, EventArgs e)
        {
         
           
            dt.Columns.Add("id",typeof(string));
            dt.Columns.Add("name",typeof(string));
            dt.Columns.Add("pid", typeof(string));
            dt.Rows.Add("01", "材料类", "null");
            dt.Rows.Add("02", "工具类", "null");
            dt.Rows.Add("03", "劳保类", "null");
            dt.Rows.Add("0101", "阀门", "01");
            dt.Rows.Add("0102", "钢材", "01");
            dt.Rows.Add("0201", "扳手", "02");
            dt.Rows.Add("020101", "梅花扳手", "0201");
            dt.Rows.Add("020102", "呆扳手", "0201");
            dt.Rows.Add("0301", "手套", "03");
            dt.Rows.Add("0302", "帽子", "03");
            dt.Rows.Add("030101", "线手套", "0301");
            dt.Rows.Add("030201", "安全帽", "0302");
            dt.Rows.Add("030202", "防尘帽", "0302");


            //调整一下位置
            tv.Width = Width/2;//宽度
            tv.Height = Height/2;//高度
            tv.Left = (Width-tv.Width) / 2;

            //读取root
            foreach (DataRow   dr in dt.Select("pid='null'"))
            {
               tv.Nodes.Add( GetTreeNode(dr));
            }

            Controls.Add(tv);
        }
        /// <summary>
        /// 读取child
        /// </summary>
        /// <param name="dr"></param>
        /// <returns></returns>
        protected TreeNode GetTreeNode(DataRow dr)
        {
            TreeNode node = new TreeNode(dr["name"].ToString());
           
            foreach(DataRow drchild in dt.Select(string.Format("pid='{0}'",dr["id"])))
            {
                node.Nodes.Add(GetTreeNode(drchild));
            }
            return node;
        }
xdashewan 2017-06-14
  • 打赏
  • 举报
回复
sql不多说,就是全抽。treeview控件你如果是新手,就先写循环嵌套,目前也就3层。如果对递归有所了解就用递归写

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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