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

高手来帮忙,最后65分,完成全额给分!

vb.net2008+SQL2005
如果数据库里有新菜单,窗体中treeview自动增加,减少则减少

数据库:


效果图:



VB.NET TreeView sql2005 数据库 --------------------编程问答-------------------- 用C#写了一个,逻辑都是一样的,没啥区别的

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 LambdaTest
{
    public partial class TreeViewTest : Form
    {
        public TreeViewTest()
        {
            InitializeComponent();
        }

        private void TreeViewTest_Load(object sender, EventArgs e)
        {
            BindTree(GetInfo());
            tvinfo.ExpandAll();
        }

        private List<Info> GetInfo()
        {
            List<Info> list = new List<Info>() 
            {
                new Info( 1,0,"根节点1"),
                new Info( 2,0,"根节点2"),
                new Info( 3,0,"根节点3"),
                new Info( 4,0,"根节点4"),
                new Info( 4,1,"子节点11"),
                new Info( 5,2,"子节点21"),
                new Info( 6,3,"子节点31"),
                new Info( 7,3,"子节点32"),
                new Info( 8,3,"子节点33")
            };
            return list;
        }

        private void BindTree(List<Info> list)
        {

            list.ForEach(node =>
            {
                
                if (node.parentid == 0)
                {
                    tvinfo.Nodes.Add(node.nodeid.ToString(),node.nodename);
                }
                else
                {
                    tvinfo.Nodes.Find(node.parentid.ToString(),false).FirstOrDefault().Nodes.Add(node.nodeid.ToString(), node.nodename);
                }
            });
        }

        private void tvinfo_AfterSelect(object sender, TreeViewEventArgs e)
        {

        }

    }

    public class Info
    {
        public int nodeid { get; set; }
        public int parentid { get; set; }
        public string nodename { get; set; }
        public Info() { }
        public Info(int nid, int pid, string nname)
        {
            this.nodeid = nid;
            this.parentid = pid;
            this.nodename = nname;
        }
    }
}



--------------------编程问答-------------------- 不好意思,刚测试了一下,这样写的太草率了,结果是错了。现在补上正确的代码:


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 LambdaTest
{
    public partial class TreeViewTest : Form
    {
        public TreeViewTest()
        {
            InitializeComponent();
        }

        private void TreeViewTest_Load(object sender, EventArgs e)
        {
            //获得父Id为0的那些数据
            List<Info> list = GetPList(0);
            //获取当前的TreeView的根节点的集合
            TreeNodeCollection nodes = tvinfo.Nodes;
            //调用方法递归加载
            LoadDataToTree(nodes, list);
        }

        private List<Info> GetInfo()
        {
            List<Info> list = new List<Info>() 
            {
                new Info( 1,0,"根节点1"),
                new Info( 2,0,"根节点2"),
                new Info( 3,0,"根节点3"),
                new Info( 4,1,"子节点11"),
                new Info( 5,2,"子节点21"),
                new Info( 6,3,"子节点31"),
                new Info( 7,3,"子节点32"),
                new Info( 8,3,"子节点33"),
                new Info( 9,4,"子节点111"),
                new Info(10,9,"子节点1111")
            };
            return list;
        }




        private void LoadDataToTree(TreeNodeCollection nodes, List<Info> list)
        {
            foreach (Info model in list)
            {
                TreeNode tn = nodes.Add(model.nodename);
                tn.Tag = model.nodeid;
                LoadDataToTree(tn.Nodes, GetPList(model.nodeid));
            }
        }

        private List<Info> GetPList(int nodeid)
        {
            return GetInfo().Where(x => x.parentid == nodeid).ToList();
        }     

    }

    public class Info
    {
        public int nodeid { get; set; }
        public int parentid { get; set; }
        public string nodename { get; set; }
        public Info() { }
        public Info(int nid, int pid, string nname)
        {
            this.nodeid = nid;
            this.parentid = pid;
            this.nodename = nname;
        }
    }
}


--------------------编程问答--------------------


    Private Sub BindTree()
        Dim root As New TreeNode("信息中心", 0, 0)
        'root.SelectedImageIndex = 0
        'root.ImageIndex = 0
        root.Name = 0
        root.Tag = -1
        Me.Tv.Nodes.Clear()
        Me.Tv.Nodes.Add(root)
        tblCatalog = CatCls.GetTable()
        Me.AddTree(0, root)
    End Sub

    Private Sub AddTree(ByVal ParentID As Integer, ByVal pNode As TreeNode)
        Dim dvTree As DataView = New DataView(tblCatalog)
        '过滤ParentID,得到当前的所有子节点 
        Dim node As TreeNode
        dvTree.RowFilter = "lngParentID=" & ParentID
        If dvTree.Count > 0 Then
            For Each r As DataRowView In dvTree
                node = New TreeNode
                node.Name = r.Item(0)
                node.Text = r.Item(1)
                node.Tag = r.Item(2)
                If (pNode Is Nothing) Then
                    Me.Tv.Nodes.Add(node)
                Else
                    pNode.Nodes.Add(node)
                End If
                '--再次递归--
                Me.AddTree(r.Item(0), node)
            Next
        End If
        pNode.Expand()
    End Sub
--------------------编程问答-------------------- 楼上的,定义呢?不好意思啊,我是新手! --------------------编程问答-------------------- --------------------编程问答-------------------- 出错的代码都是需要先将控件拖进来或者定义的。
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,