vb.net treeview 数据绑定类

'代码绑定
'Dim data As New dsTableAdapters.menuTableAdapter
'data.Fill(ds1.menu)
'TreeView1.DataSource = New HierarchicalDataSet(ds1.menu, "ID", "PID")
'TreeView1.DataBind()

'asp.net绑定
'<asp:TreeView ID="TreeView1" runat="server">
'                    <DataBindings>
'                        <asp:TreeNodeBinding DataMember="System.Data.DataRowView" TextField="TITLE" ValueField="ID" />
'                    </DataBindings>
'                </asp:TreeView>

Imports Microsoft.VisualBasic
Imports System.Data

Namespace TreeViewBinding
    Public Class HierarchicalDataSet
        Inherits HierarchicalDataSourceControl

        Public dataSet As DataTable
        Public idColumnName As String
        Public parentIdColumnName As String

        Public Event DataSourceChanged As EventHandler

        Public Sub New(ByVal dataSet As DataTable, ByVal idColumnName As String, ByVal parentIdColumnName As String)
            Me.dataSet = dataSet
            Me.idColumnName = idColumnName
            Me.parentIdColumnName = parentIdColumnName
        End Sub

        Protected Overrides Function GetHierarchicalView(ByVal viewPath As String) As System.Web.UI.HierarchicalDataSourceView
            Return New DataSourceView(Me, viewPath)
        End Function

#Region "supporting_methods"
        Private Function GetParentRow(ByVal row As DataRowView) As DataRowView
            dataSet.DefaultView.RowFilter = String.Format("{0} = {1}", idColumnName, row(parentIdColumnName).ToString())
            Dim parentRow As DataRowView = dataSet.DefaultView(0)
            dataSet.DefaultView.RowFilter = ""
            Return parentRow
        End Function

        Private Function GetChildrenViewPath(ByVal viewPath As String, ByVal row As DataRowView) As String
            Return viewPath + "/" + row(idColumnName).ToString()
        End Function

        Private Function HasChildren(ByVal row As DataRowView) As Boolean
            dataSet.DefaultView.RowFilter = String.Format("{0} = {1}", parentIdColumnName, row(idColumnName))
            Dim hasChild As Boolean = dataSet.DefaultView.Count > 0
            dataSet.DefaultView.RowFilter = ""
            Return hasChild
        End Function
        Private Function GetParentViewPath(ByVal viewPath As String) As String
            Return viewPath.Substring(0, viewPath.LastIndexOf("/"))
        End Function
#End Region

#Region "private classes that implement further interfaces"
        Class DataSourceView
            Inherits HierarchicalDataSourceView

            Private hDataSet As HierarchicalDataSet
            Private viewPath As String

            Public Sub New(ByVal hDataSet As HierarchicalDataSet, ByVal viewPath As String)
                Me.hDataSet = hDataSet
                Me.viewPath = viewPath
            End Sub

            Public Overrides Function [Select]() As System.Web.UI.IHierarchicalEnumerable
                Return New HierarchicalEnumerable(hDataSet, viewPath)
            End Function
        End Class

        Class HierarchicalEnumerable
            Implements IHierarchicalEnumerable

            Private hDataSet As HierarchicalDataSet
            Private viewPath As String

            Public Sub New(ByVal hDataSet As HierarchicalDataSet, ByVal viewPath As String)
                Me.hDataSet = hDataSet
                Me.viewPath = viewPath
            End Sub

            Public Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
                If (viewPath = "") Then
                    hDataSet.dataSet.DefaultView.RowFilter = String.Format("{0} is null", hDataSet.parentIdColumnName)
                Else
                    Dim lastID As String = viewPath.Substring(viewPath.LastIndexOf("/") + 1)
                    hDataSet.dataSet.DefaultView.RowFilter = String.Format("{0} = {1}", hDataSet.parentIdColumnName, lastID)
                End If
                Dim i As IEnumerator = hDataSet.dataSet.DefaultView.GetEnumerator()
                hDataSet.dataSet.DefaultView.RowFilter = ""
                Return i
            End Function

            Public Function GetHierarchyData(ByVal enumeratedItem As Object) As System.Web.UI.IHierarchyData Implements System.Web.UI.IHierarchicalEnumerable.GetHierarchyData
                Dim row As DataRowView = enumeratedItem
                Return New HierarchyData(hDataSet, viewPath, row)
            End Function
        End Class

        Class HierarchyData
            Implements IHierarchyData

            Private hDataSet As HierarchicalDataSet
            Private row As DataRowView
            Private viewPath As String

            Public Sub New(ByVal hDataSet As HierarchicalDataSet, ByVal viewPath As String, ByVal row As DataRowView)
                Me.hDataSet = hDataSet
                Me.viewPath = viewPath
                Me.row = row
            End Sub

            Public Function GetChildren() As System.Web.UI.IHierarchicalEnumerable Implements System.Web.UI.IHierarchyData.GetChildren
                Return New HierarchicalEnumerable(hDataSet, hDataSet.GetChildrenViewPath(viewPath, row))
            End Function

            Public Function GetParent() As System.Web.UI.IHierarchyData Implements System.Web.UI.IHierarchyData.GetParent
                Return New HierarchyData(hDataSet, hDataSet.GetParentViewPath(viewPath), hDataSet.GetParentRow(row))
            End Function

            Public ReadOnly Property HasChildren() As Boolean Implements System.Web.UI.IHierarchyData.HasChildren
                Get
                    Return hDataSet.HasChildren(row)
                End Get
            End Property

            Public ReadOnly Property Item() As Object Implements System.Web.UI.IHierarchyData.Item
                Get
                    Return row
                End Get
            End Property

            Public ReadOnly Property Path() As String Implements System.Web.UI.IHierarchyData.Path
                Get
                    Return viewPath
                End Get
            End Property

            Public ReadOnly Property Type() As String Implements System.Web.UI.IHierarchyData.Type
                Get
                    Return GetType(DataRowView).ToString
                End Get
            End Property
        End Class
#End Region
    End Class
End Namespace

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值