最近在csdn上通过解答Treeview狂拿分,还是把这个的使用发出来分享一下吧。
这个在msdn上面可以下到安装文件,然后按照上面的教程安装就对了,我记得有几步要在CMD里面运行。安装后会得到这个Microsoft.Web.UI.WebControls.dll
在专案(PS:我使用的是繁体版visual studio .net,所以有些名词不一样)的reference里引入这上面那个DLL,记得是在COM组件里加。加好之后可以看到左边的工具栏里就有了标题里说的那四个控件了,就可以拖进html设计器中使用。
关于toolbar:这个控件唯一要讲的是抓它的各个按钮的事件
Select Case CType(sender, Microsoft.Web.UI.WebControls.ToolbarButton).Index
Case "0"
第一个按钮
Case "1"
第二个按钮
end Select
关于Treeview:
第一个问题就是很多人说抓不到treeview的selectedindexchange事件,实际上是因为要将这个控件的autopostback=true了才行。但是这样做每当有indexchange事件发生时页面就会刷新,而且闪动很厉害,客户对页面闪动这个问题简直就是深恶痛绝,所以得想别的办法。
第二个问题就是无刷新抓onselectedindexchange事件。首先要autopostback=false,然后
Dim strTreeName As String = "TreeView1"
Dim strRef As String = Page.GetPostBackEventReference(TreeView1)
'使treeview只有在selectedindex change的時候才刷新的javascript
Dim strScript As String = "<script language='JavaScript'> " & vbCrLf _
& "<!-- " & vbCrLf _
& " function initTree() { " & vbCrLf _
& " " & strTreeName & ".onSelectedIndexChange = function() { " & vbCrLf _
& " if (event.oldTreeNodeIndex != event.newTreeNodeIndex) " & vbCrLf _
& " this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex + ',' + event.newTreeNodeIndex); " & vbCrLf _
& " window.setTimeout('" & strRef.Replace("'", "\'") & "', 0, 'JavaScript'); " & vbCrLf _
& " } " & vbCrLf _
& " } " & vbCrLf _
& "// --> " & vbCrLf _
& "</script>"
Page.RegisterClientScriptBlock("InitTree", strScript)
最后在html编辑器里的body里加上onload="initTree()"这样就可以无刷新抓那个的事件了
第三个是如何写递归函数来初始化树,我的例子是将数据库中数据抓出来,按照数据库中设计的父节点来依次初始化的
Private Sub intiTree(ByRef Nds As TreeNodeCollection, ByVal parentID As Integer, ByVal rootid As Integer)
'初始化treeview(遞歸)尋找以當前所選節點為根的樹,如果parentid=0則該節點為根節點,若rootid=0則該節點為子節點
'以此為條件進行篩選
Dim dv As New DataView
Dim drv As DataRowView
Dim tmpNd As TreeNode
Dim i As Integer
Try
dv.Table = ds.Tables("tree")
If parentID = 0 Then
dv.RowFilter = "dcID=" & rootid & ""
Else
dv.RowFilter = "PdcID=" & parentID & ""
End If
For Each drv In dv
tmpNd = New TreeNode
strID = drv("dcID")
tmpNd.ID = strID
tmpNd.Text = drv("cdsc")
Nds.Add(tmpNd)
intiTree(Nds(Nds.Count - 1).Nodes, CType(strID, Integer), 0)
Next
Catch ex As Exception
Response.Write(ex.ToString)
End Try
End Sub
还有些语句比较有用
Dim curnode As TreeNode = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex) '獲得當前節點對象的引用
Dim newnode As TreeNode = New TreeNode '生成一個新節點並賦值
newnode.Text = “addstr”
curnode.Nodes.Add(newnode) '在當前節點下面增加一個新的節點
curnode.Expanded = True '使當前節點和新增節點處於展開狀態 TreeView1.SelectedNodeIndex = newnode.GetNodeIndex() '置新節點為選擇狀態
第三个Multipage:
只有一个地方需要注意,就是在从第二页开始,在multipage里加入控件的话,studio不会自动在code behind里加入这些控件声明,所以最好是先把所有的控件写好了再加multipage。