高手来帮忙,最后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