如题,最好有例子,
解决方案 »
- 如何DataGridView在单元格的编辑事件中设置成Combobox??
- UpdatePanelAnimationExtender控件使用我饿你听
- webservices接受参数问题
- asp.net 网站 如何检测是否存在跨站脚本攻击漏洞
- 我的第一个ASP.NET作品----电影网站,大家来看一看
- 100分:BT问题,如何操作Excel.dll更改单元格内部字符串的格式?~~~~分不够再加~~~~
- 【求助】ASP.NET入门经典 哪里有下载电子版的???
- 郁闷中,在索引服务中添加一个编目,然后对一个文件夹进行索引,对txt文件都能很准确地检索出来,对htm何html文件确没有准确地检索出结果
- date???
- 高手给个思路,asp.net问题,问题描述见内
- test.htm文件里include 了一个top.aspx文件,显示网页的头部.为什么不显示呢,而把top.aspx里的代码直接写到test.htm里就能够显示了.
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^高分求解一看似简单问题!
1.使用初步(1)下载地址
http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp
(2)不显示树型的问题
首先:下载包分自动安装和手动安装两种包。
要下载大小约650K 的自动安装包。
其次:TreeView要求客户端浏览器版本为IE5.5及以上,最好要求客户端升级为IE6.0(3)关于闪烁
将AutoPostBack属性设置为真,SelectedIndexChange才能被执行。不过这样的话刷新的很厉害。不要刷新的话,将AutoPostBack属性设置为FALSE. (4)常用的几个属性和方法
~Index 获取树节点在树节点集合中的位置。
~Nodes 获取分配给树视图控件的树节点集合。
~Parent 获取或设置控件的父容器。
~SelectedNode 获取或设置当前在树视图控件中选定的树节点。
~ExpandAll 展开所有树节点。
~Checked 获取或设置一个值,用以指示树节点是否处于选中状态。
~Text 获取或设置在树节点标签中显示的文本。
~Expand 展开树节点。
~Clear 清空树
~Remove 从树视图控件中移除当前树节点。(5)常用的几个操作:增加、删除、修改、剪切@增加节点:
Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode()
Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode()
'NdSel 为当前选定的节点,新节点将作为它的子节点
NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)
tmpNd3.Text = "新增节点"
'在树中添加这个新节点
NdSel.Nodes.Add(tmpNd3)
@删除节点:
Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode()
Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode()
'NdSel 为当前选定的要删除节点,tmpNd3为它的父节点
NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)
If (Treepaybasic.SelectedNodeIndex <> "0") Then
tmpNd3 = NdSel.Parent
tmpNd3.Nodes.Remove(NdSel)
Else
Treepaybasic.Nodes.Clear()
End If
@修改节点:
Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode()
NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)
NdSel.Text = "aaa"
@剪切和粘贴剪切:
Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode()
Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode()
'NdSel 为当前选定的要删除节点,tmpNd3为它的父节点
NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)
'将剪切下来的节点存入session
Session("node") = NdSel
If (Treepaybasic.SelectedNodeIndex <> "0") Then
tmpNd3 = NdSel.Parent
tmpNd3.Nodes.Remove(NdSel)
End If
粘贴:
Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode()
Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode()
'NdSel 为当前要粘贴节点的父节点
NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)
tmpNd3 = Session("node")
NdSel.Nodes.Add(tmpNd3)
2.用递归生成树的算法和数据库设计
(1)递归说明
程序调用自身的编程方法称为递归(recursion)。在树的生成以及图的遍历中,递归用的很多。经典的算法求 n! (求n的阶乘)中,用的就是递归方法。递归算法的优点就是简洁,可扩充性好。但是缺点也很明显:低效。因为递归就是程序不断调用自身,对系统的资源消耗比较大。随着节点的增多,执行效率会变的很低。
为了解决树在生成过程中的层树不定的问题,同时也是为了让树的扩展性更好。树的生成使用了递归的方法。生成树的代码一旦写成,可以不改动源代码,生成无限级层次的树。树的结构完全由数据库中表的数据决定。
(2)数据库设计
创建一个数据库,设计树图信息表Treetable,表中属性包含Nodeid、Parentid、Nodename、Address等字段(分别用于表示节点的ID、父节点ID、节点名称、链接地址),其它属性根据实际用户需求和设计而定。节点名称Nodename将在树型控件的节点上显示,Nodeid字段保存节点的唯一标识号,Parentid表示当前节点的父节点ID号(例如有两个节点是父子关系,孩子节点的Parentid值就是其父节点的Nodeid),节点号父子相接组成了一个“链表”,表征并记录了树上节点的层次结构。
表具体设计如下:(简化模型,实际使用的要复杂一些)主键 属性名 类型 长度 可空 属性含义
是 Nodeid int 6 否 节点ID
Parentid int 6 否 父节点ID
Nodename char 50 否 节点名称
Address char 80 可 链接地址备注:链接地址 主要是用在: 树在框架中使用的环境。链接可以指向其他框架页中的地址或是带不同的参数。
――――――――――――递归函数――――――――――――
'生成树的函数
Private Sub inittree(ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal parentId As Integer)
Dim dv As New DataView()
Dim dvrow As DataRowView
Dim tmpNode As Microsoft.Web.UI.WebControls.TreeNode
'intId为数值型变量,其作用是记录并传递当前记录的ID,做为它子节点的PARENTID值
Dim intId As Integer
dv.Table = mySet.Tables("paybasic")
'parentId传递的是 additem函数中的intId.下面语句的作用是找出当前节点的子孩子集合。
dv.RowFilter = "parentID='" & parentId & "'"
'如果当前节点有孩子,则遍历所有的孩子,并调用递归函数。
For Each dvrow In dv
tmpNode = New Microsoft.Web.UI.WebControls.TreeNode()
'为当前节点的各个属性赋值。
tmpNode.ID = dvrow("nodeID")
tmpNode.Text = dvrow("nodename")
tmpNode.NavigateUrl = dvrow("Address")
intId = dvrow("parentID")
'添加一个节点
Nds.Add(tmpNode)
'调用递归函数
inittree(Nds(Nds.Count - 1).Nodes, intId)
Next
End Sub
――――――――――――――――调用递归函数――――――――――――――――――
CreateReaderDataSet()
inittree(Treepaybasic.Nodes, 999)
―――――――――――――――――生成数据集―――――――――――――――――――
'生成数据集的函数
Private Sub CreateReaderDataSet()
'在运行时连接,并设置连接属性
MyConn = New System.Data.OleDb.OleDbConnection("Provider=MSDAORA.1;Data Source=oracle9;User ID=user;Password=****;")
'设置SelectCommand命令
myAdapter.SelectCommand = New System.Data.OleDb.OleDbCommand("select * from treenode", MyConn)
'填充数据集
myAdapter.Fill(mySet, "treenode")
End Sub
与数据库相关的节点操作:
(1)添加节点
1.1 节点的树型添加
//程序的功能是在点击的节点下面添加新节点
Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode()
Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode()
'NdSel 为当前选定的要删除节点,tmpNd3为它的父节点
NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)
'要添加的节点的各个属性
tmpNd3.ID = 111
tmpNd3.Text = "aaa"
'用nodes.add添加节点
NdSel.Nodes.Add(tmpNd3)
1.2 数据库中的节点添加操作
//数据库连接语句在此省略
'在运行时连接,并设置连接属性
Dim insertcomm = New System.Data.OleDb.OleDbCommand()
'定义存储命令的各种属性
insertcomm.CommandText = "insert into treebasic(id,parentid,name) values('" & pid & "','" & parid & "','" & nodetext & "')"
insertcomm.Connection = MyConn
'打开连接、执行命令
MyConn.Open()
insertcomm.ExecuteNonQuery()
MyConn.Close()
(2)修改节点
2.1 节点属性的树型修改
Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode()
'tmpNd3 为当前选定的节点
tmpNd3 = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)
tmpNd3.Text = "aaa"
2.2 数据库中的节点属性修改操作
'定义修改命令的属性
Dim updatecomm = New System.Data.OleDb.OleDbCommand()
'定义修改命令的各种属性
updatecomm.CommandText = "update treebasic set name='" & nodetext & "' ,re='" & re & "' ,links='" & purl & "' where payid=" & CInt(pid) & ""
updatecomm.Connection = MyConn
'打开连接、执行命令
MyConn.Open()
updatecomm.ExecuteNonQuery()
MyConn.Close()
查找节点并展开的例子,你看看:
Private Sub findandexpand_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Treepaybasic.Nodes(0) 为树的跟节点,从根节点找起
If (Treepaybasic.Nodes(0).Text = Me.TextBox1.Text) Then
Treepaybasic.SelectedNodeIndex = "0"
Else
'要找的节点不是根节点,调用递归函数查找
findnode(Treepaybasic.Nodes)
End If
End Sub
'查找节点的函数
inittree(Nds(Nds.Count - 1).Nodes, intId) '这个要改
其中treenode 不再有nodes这个属性了,不过有childnodes,也是属于Microsoft.Web.UI.WebControls.TreeNodeCollection类型的,我就改成childnodes了,
不过该了之后我还有其他的问题,