例: 家用电器 无 台 00001 1
电视机 家用电器 台 00002 2
我想把数据库中的数据加载到Treeview控件中,并按照他们的级别树状显示.下面是我自己写的代码:
Imports System.Data.OleDb
Public Class FrmGoodsSort
Dim Connstr As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\jxc.mdb"
Sub FillTreeview()
Dim sqlstr As String = "Select * From GoodsSortInfo" '查询到表数据
Dim conn As OleDbConnection = New OleDbConnection(Connstr)
Dim mycommand As New OleDbCommand(sqlstr, conn)
Dim Table As DataTable = EditData.Search(Connstr, sqlstr) '(EditData是我做的一个类.数据库操作用)
Dim sqlrd As OleDbDataReader
Dim ii As Integer
conn.Open()
sqlrd = mycommand.ExecuteReader
While sqlrd.Read
Dim Node As New TreeNode
If sqlrd.Item(4) = 1 Then '判断第一节点的名称,添加到树状控件中.
Node.Tag = sqlrd.Item(3)
Node.Text = sqlrd.Item(0)
TreeView1.Nodes(0).Nodes.Add(Node)
End If
Dim i As Integer
For i = 0 To (Table.Rows.Count - 1)
If sqlrd.Item(4) = 2 And sqlrd.Item(1) = Table.Rows(i).Item(0) Then '(判断2级节点上的名称,并且循环判断他们按照分类添加到各自的上级目录中,作为子结点.这段代码有点繁琐,我也不知道自己怎么想出来的)
Node.Tag = sqlrd.Item(3)
Node.Text = sqlrd.Item(0)
TreeView1.Nodes(0).Nodes(i).Nodes.Add(Node) '(按照对应的节点名进行添加)
End If
Next
End While
conn.Close()
End Sub
.现在只有做到2个节点,因为出现问题.如果一次性编辑好数据库ACCESS里面的表数据.可以运行,并且分级显示数据不会报错.
但是,你现在停止运行,然后打开数据库,增加一个1级节点的数据,在往1级节点上增加一个2级节点,在运行程序的时候,他就会报错.
比如:现在添加一个1级节点.在数据库中添加 食品. 在添加一个食品的子节点. 火腿肠,节点级别 是2. 现在运行程序,立刻就会出现错误.
TreeView1.Nodes(0).Nodes(i).Nodes.Add(Node) 代码处出现:指定的参数已超出有效值的范围。参数名: index
为什么会这样,请各位高手指教啊.我是菜鸟啊...没有任何资料.这个控件我弄了2个星期多了.也看了很多人写的关于这个控件的用法,但是总觉得都不好用...我只想把数据库中的数据 按照级别,动态的填充到树状控件中.. 请各位高手帮忙啊...希望找一个老师或者朋友能够指点一下我. 感激不尽.....我分不多, 如果可以帮组我的话,我可以送QB啊 送其他的都可以的. 谢谢了....等待好心人的出现......一个坚强菜鸟的呼救....第一次发帖求救....
19 个解决方案
#1
高手们快点来啊 找个师傅....谁能帮帮小弟啊 我学得好辛苦啊
#2
救命啊......谁来救救我啊 大哥们......师傅们.....找个师傅啊....谁着着我师傅啊 拜托了
#3
你代码写的太凌乱了,建议你将SQL语句查询到的数据填充到DataTable中,然后再循环给TreeView赋值,应该不会出错的
#4
你说的是 Dim TempRow as DataRow
然后在 For Each Temprow In Table.Rows
这样吗?? 这样很麻烦啊 而且要实现动态的 树状也好麻烦 我开始就是用的这样的方法/
然后在 For Each Temprow In Table.Rows
这样吗?? 这样很麻烦啊 而且要实现动态的 树状也好麻烦 我开始就是用的这样的方法/
#5
我QQ 335367013 Email 335367013@qq.com 电话 13710378614 谁能帮帮我 谢谢了...等待中.....
#6
你是想实现如下结构吗?
集团
--子公司
---部门
--车间
---班组
你的数据表结构应该变更一下
编号 名称 是否* 级别 父级编号
101 家用电器 True 0 0
102 电视机 False 1 101
做个递归吧!
集团
--子公司
---部门
--车间
---班组
你的数据表结构应该变更一下
编号 名称 是否* 级别 父级编号
101 家用电器 True 0 0
102 电视机 False 1 101
做个递归吧!
#7
你好 我想实现的是
—所有类别0
-1家用电器
-2电视机
-2洗衣机
-2电冰箱
-1化妆品
-2口红
-2眼影
-2唇彩
-1食品类
-2火腿肠
-2鸡蛋
-2奶粉
我想要的是这样的效果。而且是动态加载的。。。现在这个代码可以加载显示数据库的库存,并分好类。但是现在不能往数据库里面添加1级节点的数据,一添加就出错。比如现在我添加一个药品1.感冒药2.。。就出错了
—所有类别0
-1家用电器
-2电视机
-2洗衣机
-2电冰箱
-1化妆品
-2口红
-2眼影
-2唇彩
-1食品类
-2火腿肠
-2鸡蛋
-2奶粉
-药品
-2感冒药
如果现在添加一个药品和感冒药,他就会出错,如果是数据库一次性把数据输入完毕的话,他不会出现错误。请高手们帮忙解决 。。。。谢谢了 等待中。。。。。。。。。。。。。。
—所有类别0
-1家用电器
-2电视机
-2洗衣机
-2电冰箱
-1化妆品
-2口红
-2眼影
-2唇彩
-1食品类
-2火腿肠
-2鸡蛋
-2奶粉
我想要的是这样的效果。而且是动态加载的。。。现在这个代码可以加载显示数据库的库存,并分好类。但是现在不能往数据库里面添加1级节点的数据,一添加就出错。比如现在我添加一个药品1.感冒药2.。。就出错了
—所有类别0
-1家用电器
-2电视机
-2洗衣机
-2电冰箱
-1化妆品
-2口红
-2眼影
-2唇彩
-1食品类
-2火腿肠
-2鸡蛋
-2奶粉
-药品
-2感冒药
如果现在添加一个药品和感冒药,他就会出错,如果是数据库一次性把数据输入完毕的话,他不会出现错误。请高手们帮忙解决 。。。。谢谢了 等待中。。。。。。。。。。。。。。
#8
出现错误,请帖出异常的说明。
#9
如果现在添加一个药品和感冒药,他就会出错 TreeView1.Nodes(0).Nodes(i).Nodes.Add(node) 指定的参数已超出有效值的范围。
参数名: index
它提示这个错误。 我把程序关闭,重庆启动程序的时候它应该会重新引索数据库啊。我就想不明白这点
参数名: index
它提示这个错误。 我把程序关闭,重庆启动程序的时候它应该会重新引索数据库啊。我就想不明白这点
#10
这个问题很明显是由于
Nodes(0)或者Nodes(i)不存在引起的。
你要在添加之前做检查:
if(TreeView1.Nodes.Count>0 && TreeView1.Nodes[0].Nodes.Count>i)
{
TreeView1.Nodes[0].Nodes[i].Nodes.Add(node);
}
Nodes(0)或者Nodes(i)不存在引起的。
你要在添加之前做检查:
if(TreeView1.Nodes.Count>0 && TreeView1.Nodes[0].Nodes.Count>i)
{
TreeView1.Nodes[0].Nodes[i].Nodes.Add(node);
}
#11
郁闷了。。。看来是没有高手愿意来回答了。。。等了一天多了 如有高手愿意帮忙请加我QQ 335367013 感激不尽
#12
phy 大哥 您好 非常感谢你的指点。Nodes(0)或者Nodes(i)是存在的,数据库中明明有nodes4个节点。但是只能加载3个出来。 我在这样的方法动态填充Treeview控件可以吗? 您有更好的方法和方案动态的填充Treeview控件吗? 请指引。。我是个菜鸟。需要您的帮助 我用的是vb20005 VB
#13
Private Sub treelist()
TreeView1.Nodes.Clear()
sqlread("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc", "主菜")
For i As Integer = 0 To EchoDS.Tables("主菜").Rows.Count - 1
TreeView1.Nodes.Add(EchoDS.Tables("主菜").Rows(i).Item("id"), EchoDS.Tables("主菜").Rows(i).Item("菜单名称"))
sqlread("select* from 新菜单设置 where 上级菜单=" & _
EchoDS.Tables("主菜").Rows(i).Item("id") & " order by 排序 asc", "子菜")
Dim pic As String
For j As Integer = 0 To EchoDS.Tables("子菜").Rows.Count - 1
If EchoDS.Tables("子菜").Rows(j).Item("image").ToString <> "" And IsDBNull(EchoDS.Tables("子菜").Rows(j).Item("image")) = False Then
pic = " [有图标]"
Else
pic = ""
End If
TreeView1.Nodes.Item(Mid(EchoDS.Tables("子菜").Rows(j).Item("上级菜单"), 1, 2)) _
.Nodes.Add(EchoDS.Tables("子菜").Rows(j).Item("id"), _
EchoDS.Tables("子菜").Rows(j).Item("菜单名称") & " (" & EchoDS.Tables("子菜").Rows(j).Item("指向窗体") & ")" & pic)
If EchoDS.Tables("子菜").Rows(j).Item("LINE") = True Then
TreeView1.Nodes.Item(Mid(EchoDS.Tables("子菜").Rows(j).Item("上级菜单"), 1, 2)) _
.Nodes.Add("-----(华丽的分隔线)-----")
End If
Next
EchoDS.Tables("子菜").Reset()
Next
EchoDS.Reset()
End Sub
这样行不?
#14
谢谢您 htpower 大哥,我正在测试,我是菜鸟的,你的代码我要点时间来消化,谢谢你啊 我在测试。结果一会回复你
#15
htpower 大哥 您的代码我还是看不明白,可能是我太菜了。有几点疑惑想和你求教一下。
1:sqlread("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc", "主菜") 中sqlread是 那里来的。是您定义的
Dim sqlread As String = ("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc""主菜")查询数据库语句吗?
2:您写的这段代码是需要几个表。表的结构我弄不出来,
3:最后的那些语句我都不怎么读的通。 TreeView1.Nodes.Item(Mid(echods.Tables("子菜").Rows(j).Item("上级菜单"), 1, 2)) _
.Nodes.Add(echods.Tables("子菜").Rows(j).Item("id"), _ 这里的1.2 是什么意思了 麻烦您了
1:sqlread("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc", "主菜") 中sqlread是 那里来的。是您定义的
Dim sqlread As String = ("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc""主菜")查询数据库语句吗?
2:您写的这段代码是需要几个表。表的结构我弄不出来,
3:最后的那些语句我都不怎么读的通。 TreeView1.Nodes.Item(Mid(echods.Tables("子菜").Rows(j).Item("上级菜单"), 1, 2)) _
.Nodes.Add(echods.Tables("子菜").Rows(j).Item("id"), _ 这里的1.2 是什么意思了 麻烦您了
#16
你要在添加之前做检查:
if(TreeView1.Nodes.Count>0 && TreeView1.Nodes[0].Nodes.Count>i)
{
TreeView1.Nodes[0].Nodes[i].Nodes.Add(node);
}
if(TreeView1.Nodes.Count>0 && TreeView1.Nodes[0].Nodes.Count>i)
{
TreeView1.Nodes[0].Nodes[i].Nodes.Add(node);
}
#17
补充一下 htpower大哥 你用的是 Microsoft Visual Studio 2005 中的VB开发工具吗?
sqlread("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc", "主菜")
这一句后面的排序那里有问题。这样个格式不对吧。还是我没有弄好?
sqlread("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc", "主菜")
这一句后面的排序那里有问题。这样个格式不对吧。还是我没有弄好?
#18
结贴了 自己已经把问题解决了。。上面的各位,虽然你们给的答案都不好,都是废话,或者说是牛头不对马嘴,但是还是要说声谢谢。
一会在把自己你的代码优化有一下发出来和新人菜鸟一起分享。
动态填充treeview的代码。。
一会在把自己你的代码优化有一下发出来和新人菜鸟一起分享。
动态填充treeview的代码。。
#19
sqlread是我自已写的一个加载到DATASET的FUNCTION
#20
#1
高手们快点来啊 找个师傅....谁能帮帮小弟啊 我学得好辛苦啊
#2
救命啊......谁来救救我啊 大哥们......师傅们.....找个师傅啊....谁着着我师傅啊 拜托了
#3
你代码写的太凌乱了,建议你将SQL语句查询到的数据填充到DataTable中,然后再循环给TreeView赋值,应该不会出错的
#4
你说的是 Dim TempRow as DataRow
然后在 For Each Temprow In Table.Rows
这样吗?? 这样很麻烦啊 而且要实现动态的 树状也好麻烦 我开始就是用的这样的方法/
然后在 For Each Temprow In Table.Rows
这样吗?? 这样很麻烦啊 而且要实现动态的 树状也好麻烦 我开始就是用的这样的方法/
#5
我QQ 335367013 Email 335367013@qq.com 电话 13710378614 谁能帮帮我 谢谢了...等待中.....
#6
你是想实现如下结构吗?
集团
--子公司
---部门
--车间
---班组
你的数据表结构应该变更一下
编号 名称 是否* 级别 父级编号
101 家用电器 True 0 0
102 电视机 False 1 101
做个递归吧!
集团
--子公司
---部门
--车间
---班组
你的数据表结构应该变更一下
编号 名称 是否* 级别 父级编号
101 家用电器 True 0 0
102 电视机 False 1 101
做个递归吧!
#7
你好 我想实现的是
—所有类别0
-1家用电器
-2电视机
-2洗衣机
-2电冰箱
-1化妆品
-2口红
-2眼影
-2唇彩
-1食品类
-2火腿肠
-2鸡蛋
-2奶粉
我想要的是这样的效果。而且是动态加载的。。。现在这个代码可以加载显示数据库的库存,并分好类。但是现在不能往数据库里面添加1级节点的数据,一添加就出错。比如现在我添加一个药品1.感冒药2.。。就出错了
—所有类别0
-1家用电器
-2电视机
-2洗衣机
-2电冰箱
-1化妆品
-2口红
-2眼影
-2唇彩
-1食品类
-2火腿肠
-2鸡蛋
-2奶粉
-药品
-2感冒药
如果现在添加一个药品和感冒药,他就会出错,如果是数据库一次性把数据输入完毕的话,他不会出现错误。请高手们帮忙解决 。。。。谢谢了 等待中。。。。。。。。。。。。。。
—所有类别0
-1家用电器
-2电视机
-2洗衣机
-2电冰箱
-1化妆品
-2口红
-2眼影
-2唇彩
-1食品类
-2火腿肠
-2鸡蛋
-2奶粉
我想要的是这样的效果。而且是动态加载的。。。现在这个代码可以加载显示数据库的库存,并分好类。但是现在不能往数据库里面添加1级节点的数据,一添加就出错。比如现在我添加一个药品1.感冒药2.。。就出错了
—所有类别0
-1家用电器
-2电视机
-2洗衣机
-2电冰箱
-1化妆品
-2口红
-2眼影
-2唇彩
-1食品类
-2火腿肠
-2鸡蛋
-2奶粉
-药品
-2感冒药
如果现在添加一个药品和感冒药,他就会出错,如果是数据库一次性把数据输入完毕的话,他不会出现错误。请高手们帮忙解决 。。。。谢谢了 等待中。。。。。。。。。。。。。。
#8
出现错误,请帖出异常的说明。
#9
如果现在添加一个药品和感冒药,他就会出错 TreeView1.Nodes(0).Nodes(i).Nodes.Add(node) 指定的参数已超出有效值的范围。
参数名: index
它提示这个错误。 我把程序关闭,重庆启动程序的时候它应该会重新引索数据库啊。我就想不明白这点
参数名: index
它提示这个错误。 我把程序关闭,重庆启动程序的时候它应该会重新引索数据库啊。我就想不明白这点
#10
这个问题很明显是由于
Nodes(0)或者Nodes(i)不存在引起的。
你要在添加之前做检查:
if(TreeView1.Nodes.Count>0 && TreeView1.Nodes[0].Nodes.Count>i)
{
TreeView1.Nodes[0].Nodes[i].Nodes.Add(node);
}
Nodes(0)或者Nodes(i)不存在引起的。
你要在添加之前做检查:
if(TreeView1.Nodes.Count>0 && TreeView1.Nodes[0].Nodes.Count>i)
{
TreeView1.Nodes[0].Nodes[i].Nodes.Add(node);
}
#11
郁闷了。。。看来是没有高手愿意来回答了。。。等了一天多了 如有高手愿意帮忙请加我QQ 335367013 感激不尽
#12
phy 大哥 您好 非常感谢你的指点。Nodes(0)或者Nodes(i)是存在的,数据库中明明有nodes4个节点。但是只能加载3个出来。 我在这样的方法动态填充Treeview控件可以吗? 您有更好的方法和方案动态的填充Treeview控件吗? 请指引。。我是个菜鸟。需要您的帮助 我用的是vb20005 VB
#13
Private Sub treelist()
TreeView1.Nodes.Clear()
sqlread("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc", "主菜")
For i As Integer = 0 To EchoDS.Tables("主菜").Rows.Count - 1
TreeView1.Nodes.Add(EchoDS.Tables("主菜").Rows(i).Item("id"), EchoDS.Tables("主菜").Rows(i).Item("菜单名称"))
sqlread("select* from 新菜单设置 where 上级菜单=" & _
EchoDS.Tables("主菜").Rows(i).Item("id") & " order by 排序 asc", "子菜")
Dim pic As String
For j As Integer = 0 To EchoDS.Tables("子菜").Rows.Count - 1
If EchoDS.Tables("子菜").Rows(j).Item("image").ToString <> "" And IsDBNull(EchoDS.Tables("子菜").Rows(j).Item("image")) = False Then
pic = " [有图标]"
Else
pic = ""
End If
TreeView1.Nodes.Item(Mid(EchoDS.Tables("子菜").Rows(j).Item("上级菜单"), 1, 2)) _
.Nodes.Add(EchoDS.Tables("子菜").Rows(j).Item("id"), _
EchoDS.Tables("子菜").Rows(j).Item("菜单名称") & " (" & EchoDS.Tables("子菜").Rows(j).Item("指向窗体") & ")" & pic)
If EchoDS.Tables("子菜").Rows(j).Item("LINE") = True Then
TreeView1.Nodes.Item(Mid(EchoDS.Tables("子菜").Rows(j).Item("上级菜单"), 1, 2)) _
.Nodes.Add("-----(华丽的分隔线)-----")
End If
Next
EchoDS.Tables("子菜").Reset()
Next
EchoDS.Reset()
End Sub
这样行不?
#14
谢谢您 htpower 大哥,我正在测试,我是菜鸟的,你的代码我要点时间来消化,谢谢你啊 我在测试。结果一会回复你
#15
htpower 大哥 您的代码我还是看不明白,可能是我太菜了。有几点疑惑想和你求教一下。
1:sqlread("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc", "主菜") 中sqlread是 那里来的。是您定义的
Dim sqlread As String = ("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc""主菜")查询数据库语句吗?
2:您写的这段代码是需要几个表。表的结构我弄不出来,
3:最后的那些语句我都不怎么读的通。 TreeView1.Nodes.Item(Mid(echods.Tables("子菜").Rows(j).Item("上级菜单"), 1, 2)) _
.Nodes.Add(echods.Tables("子菜").Rows(j).Item("id"), _ 这里的1.2 是什么意思了 麻烦您了
1:sqlread("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc", "主菜") 中sqlread是 那里来的。是您定义的
Dim sqlread As String = ("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc""主菜")查询数据库语句吗?
2:您写的这段代码是需要几个表。表的结构我弄不出来,
3:最后的那些语句我都不怎么读的通。 TreeView1.Nodes.Item(Mid(echods.Tables("子菜").Rows(j).Item("上级菜单"), 1, 2)) _
.Nodes.Add(echods.Tables("子菜").Rows(j).Item("id"), _ 这里的1.2 是什么意思了 麻烦您了
#16
你要在添加之前做检查:
if(TreeView1.Nodes.Count>0 && TreeView1.Nodes[0].Nodes.Count>i)
{
TreeView1.Nodes[0].Nodes[i].Nodes.Add(node);
}
if(TreeView1.Nodes.Count>0 && TreeView1.Nodes[0].Nodes.Count>i)
{
TreeView1.Nodes[0].Nodes[i].Nodes.Add(node);
}
#17
补充一下 htpower大哥 你用的是 Microsoft Visual Studio 2005 中的VB开发工具吗?
sqlread("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc", "主菜")
这一句后面的排序那里有问题。这样个格式不对吧。还是我没有弄好?
sqlread("select * from 新菜单设置 where 上级菜单=0 order by 排序 asc", "主菜")
这一句后面的排序那里有问题。这样个格式不对吧。还是我没有弄好?
#18
结贴了 自己已经把问题解决了。。上面的各位,虽然你们给的答案都不好,都是废话,或者说是牛头不对马嘴,但是还是要说声谢谢。
一会在把自己你的代码优化有一下发出来和新人菜鸟一起分享。
动态填充treeview的代码。。
一会在把自己你的代码优化有一下发出来和新人菜鸟一起分享。
动态填充treeview的代码。。
#19
sqlread是我自已写的一个加载到DATASET的FUNCTION