這是改寫MSDN的Treeview in SQL範例

原本它是搭配NorthWind資料庫來取出資料,並且有兩層節點。簡單的說有點類似迴圈,從DB撈出產品類別+專屬代號以後,當成第一層的樹根,文字為類別名稱,值是代號。再用代號去建立新的SQL指令然後去尋找相同代號(類別)的產品,建立第二層的根。

原先的程式已經被我改成可以直接點選就作加入類別(產品)/刪除的功能了,但是尋找的功能一直沒空研究。最近把專案拉回Access的懷抱,為了測試概念所以重寫了這份範例,而且也只有一層樹根。另外有一個地方的宣告名稱寫很爛,因為測試用的就隨便寫了,別鞭我!


 

資料表結構 [com] , [No]

資料表名稱 udb_com

 

命名空間

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data.OleDb" %>

SCRIPT

Protected Sub TreeView1_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs)

        If e.Node.ChildNodes.Count = 0 Then
            Select Case e.Node.Depth
                Case 0
                    '欄位名稱
                    PopulateCategories(e.Node)
                Case 1
                    '標題下面的分類
                    'PopulateProducts(e.Node)
            End Select
        End If
    End Sub


    Sub PopulateCategories(ByVal node As TreeNode)
        Dim sqlQuery As New OleDbCommand
        sqlQuery.CommandText = "SELECT [No], [com] FROM [udb_com]"
        
        Dim ResultSet As DataSet
        ResultSet = RunQuery(sqlQuery)
        
        Response.Write(ResultSet.Tables(0).Rows.Count)
        

        If ResultSet.Tables.Count > 0 Then
            Dim row As DataRow
            For Each row In ResultSet.Tables(0).Rows
                Dim NewNode As TreeNode = New TreeNode(row("com").ToString(), row("no").ToString())
                NewNode.PopulateOnDemand = True
                NewNode.SelectAction = TreeNodeSelectAction.SelectExpand
                NewNode.Selected = True
                node.ChildNodes.Add(NewNode)
            Next
        Else
            Response.Write("no")
        End If

    End Sub
    
    


    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    
    End Sub


    
    Function RunQuery(ByVal sqlQuery As OleDbCommand) As DataSet
        Dim x As String
        x = ConfigurationManager.ConnectionStrings("ConnectionString2").ConnectionString
        
        Dim xx As New OleDbConnection
        xx.ConnectionString = x
        
        Dim xxx As New OleDbDataAdapter
        xxx.SelectCommand = sqlQuery
        sqlQuery.Connection = xx
        
        Dim xxxx As DataSet = New DataSet
        
        Try
            xxx.Fill(xxxx)
        Catch ex As Exception
            Response.Write("Unable to connect to SQL Server.")
        End Try
        
        Return xxxx
    End Function

 

版面佈署

    <asp:SqlDataSource ID="SqlDataSource1" runat="server"
        ConnectionString="<%$ ConnectionStrings:ConnectionString2 %>"
        ProviderName="<%$ ConnectionStrings:ConnectionString2.ProviderName %>"
        SelectCommand="SELECT [No], [com] FROM [udb_com]"></asp:SqlDataSource>

    <asp:TreeView ID="TreeView1" runat="server"
        OnTreeNodePopulate="TreeView1_TreeNodePopulate" MaxDataBindDepth="2"
        ExpandDepth="1" Font-Bold="False" Font-Overline="False" Font-Size="Large"
                    ImageSet="Contacts" NodeIndent="10" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged">
        <ParentNodeStyle Font-Bold="True" ForeColor="#5555DD" />
        <HoverNodeStyle Font-Underline="False" BackColor="#CCFFCC" Font-Bold="True" />
        <SelectedNodeStyle Font-Underline="True" HorizontalPadding="0px"
            VerticalPadding="0px" BackColor="#FFCCFF" Font-Bold="True" />
        <Nodes>
            <asp:TreeNode PopulateOnDemand="True" Text="客戶" Value="main"></asp:TreeNode>
        </Nodes>
        <NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black"
            HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" />
    </asp:TreeView>

相关文章