有关Treeview控件的问题!

yucs 2006-05-18 08:44:47
我想用TREEVIEW做一个二层的树形菜单,就如CSDN本论坛的导行栏一样,但结点随时更新,只能从数据库里分类加载,下面是我加载根结点的代码,运行成功!
但不知怎么分类加载子结点?


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim dtr As System.Data.OleDb.OleDbDataReader
Dim cmd As System.Data.OleDb.OleDbCommand


TreeView1.Nodes.Clear()
cmd = New OleDb.OleDbCommand("select * from title", OleDbConnection1)

OleDbConnection1.Open()
dtr = cmd.ExecuteReader()
Dim n As Integer
While dtr.Read()

If dtr.GetBoolean(2) = True Then
TreeView1.Nodes.Add(New TreeNode(dtr.GetString(1)))
End If
End While

dtr.Close()
OleDbDataAdapter1.Fill(DataSet11)
OleDbConnection1.Close()
End Sub
...全文
193 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yucs 2006-05-21
  • 打赏
  • 举报
回复
to stone_soup(夜不打拾)
能说详细点吗?贴个比较完整的代码,谢谢了!
yucs 2006-05-21
  • 打赏
  • 举报
回复
to chengpei_chen()
你那种方法也很难实现根结点分类过滤,
因为新增加的根结点的node_id和node_name是不确定的
stone_soup 2006-05-21
  • 打赏
  • 举报
回复
不知怎么分类加载子结点?
-------------------------------
你試試.在上面的語句中加
If dtr.GetBoolean(2) = True Then
with TreeView1.Nodes.Add(New TreeNode(dtr.GetString(1)))
.add("UnKnowValue")
end with
End If
這樣.第二層每個都為:UnKnowValue

再在Treeview1中的TreeView1.BeforeExpand事件中
先清除UnKnowValue節點
e.Clear()
先判斷是否存在此節點的子值(在數據庫中).
如果存在:就用Select 節點名 from 你的表 加載到一個 數據集
再加載這個數據集中的數據到 展開前的節點


While dtr.Read()
e.Node.Nodes.Add()(New TreeNode(dtr.GetString(1)))
'e.noe 為你展開的對像
End While

wangchaocn 2006-05-21
  • 打赏
  • 举报
回复
mark
chengpei_chen 2006-05-21
  • 打赏
  • 举报
回复
这样设计的数据库比较罗嗦,你可以这样设计数据库呀。
Node_id Node_name ----
其中Node_id为节点编号,如果为一级根节点就用两位数字如01,02,...
如为二级节点,节点一的子节点可以为:01_01,01_02...
节点二的子节点可以为:02_01,02_02...
这样既省去了一些字段,在加载的时候已可以根据节点的编号直接加载就可以了
yucs 2006-05-20
  • 打赏
  • 举报
回复
你好,谢谢你的解答,但是你误解了我的意思,也许是我没有说清楚吧!
我的根结点和子结点的值都在一个表中,并且根结点和子结点都可以随意的动态增加,
数据库结构如:
node_id node_name node_per node_child node_sort
node_per和node_child是布尔值,可以判断是否是根结点或子结点
如果是子结点可以通过node_sort(指定根结点的名称)字段来分类过滤
表的记录是动态的增加的,根结点也可能增加,每次启动窗体要子结点都要分类加载
shan__le 2006-05-20
  • 打赏
  • 举报
回复
有直接调用的吗?
wugong 2006-05-20
  • 打赏
  • 举报
回复
如果讨论:请加qq:547157337
yucs 2006-05-20
  • 打赏
  • 举报
回复
要在数据库中完全动态的加载,子结点加载在哪个根结点下要通过代码判断来分类
不务正 2006-05-18
  • 打赏
  • 举报
回复
参考:

TreeNode JiaoYanZuNode = new TreeNode("教研组");
treeView1.Nodes.Add(JiaoYanZuNode);
string strsql = "SELECT * FROM 教研组;";
DataTable tb = AccessData.GetTable(strsql,"JiaoYanZu1");
foreach (DataRow rw in tb.Rows)
{
string JiaoYanZu = Convert.ToString(rw["教研组"]);
TreeNode newNode = new TreeNode(JiaoYanZu);
JiaoYanZuNode.Nodes.Add(newNode);

strsql = "SELECT * FROM 教师信息 WHERE 教研组 ='" + JiaoYanZu + "'";
DataTable tb2 = AccessData.GetTable(strsql, "JiaoYanZu2");
foreach (DataRow rw2 in tb2.Rows)
newNode.Nodes.Add(Convert.ToString(rw2["姓名"]));
}
kssys 2006-05-18
  • 打赏
  • 举报
回复
dim firstnode as treenode= treeviw1.nodes(0)
firstnode.nodes.add(new treenode("福建"))

參看:http://community.csdn.net/Expert/TopicView3.asp?id=4756633

16,721

社区成员

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

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