设置DisplayMember属性的格式如:字段1;字段2;字段3…
,在设置属性时,将传来的参数转换为字符串数组mDisplayMember,在检索值时返回数据如:值1 值2 值3.…
| Protected Overridable Function GetDisplay(ByVal Index As Integer) As Object Dim i As Integer Dim temp As String = "" For i = 0 To mDisplayMember.Length - 1 temp = temp & IIf(i > 0, LinkChar, "") & mDataView(Index)(mDisplayMember(i)) Next Return temp End Function |
其它检索值的函数请参见源程序。
生成树
UpdateTreeView调用私有方法FillTree来生成树,需要注意的,FillTree只是生成指定结点的子结点并将其添加到指定结点,而不是一次就将所有结点添加到树中,如果未指定结点(第一次填充时),只是添加顶层结点。
| Private Sub FillTree(ByRef pnode As myTreeNode, Optional ByVal filter As String = "") mDataView.RowFilter = filter Dim i As Integer, icol As Integer Dim newnode As myTreeNode RemoveHandler cm.PositionChanged, AddressOf cm_PositionChanged Me.BeginUpdate() For i = 0 To mDataView.Count() - 1 newnode = New myTreeNode(GetDisplay(i), GetValue(i), GetPid(i), GetCPtr(i)) '当有子结点时,为这个结点添加一个空子结点 If newnode.CPtr Then Dim nullnode As New myTreeNode() nullnode.Value = NoExpandNodeValue newnode.Nodes.Add(nullnode) End If If pnode Is Nothing Then Me.Nodes.Clear() Me.Nodes.Add(newnode) Else pnode.Nodes.Add(newnode) End If Next Me.EndUpdate() mDataView.RowFilter = "" AddHandler cm.PositionChanged, AddressOf cm_PositionChanged End Sub |
在展开有子结点的结点前,删除所有子结点,再用FillTree为待展开结点新增子结点。
| Private Sub dbTreeView_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles MyBase.BeforeExpand '当是新增结点引起BeforeExpand事件时,直接退出。 If ExpandWhenAddNode Then Exit Sub '在展开结点前更新子结点 Dim currentnode As myTreeNode = CType(e.Node, myTreeNode) With currentnode .Nodes.Clear() FillTree(currentnode, mPidMember & "= " & CInt(.Value)) End With End Sub |

