這是改寫MSDN的TreeviewPopulateOnDemand範例,該範例主要是在示範SQL資料庫和Treeview的搭配使用。

而本範例以AccessDB為例子,目標在於除了示範TreeView的階層使用以外,另含搜尋功能。雖然本範例最終的code並不如想像的多,而多了解一下的話也會覺得並非想像中的難,但是在起步研究的時候到是花了我挺多心思。在這過程中深入的了解datasetTreeViewoledb等組件的運用。如果您本身就很熟稔這些組件的話相信本範例不用一天即可了解其運作。希望本範例能夠給正苦於此的人一點指引。

這範例其實有些缺點,像是有些累贅的語法、變數名稱取不好之類的,那是為了我自己方便所致,請見諒。如果可以改更短的話也歡迎提出。

 

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    Protected Sub Page_Load(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

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        
        Dim sqlQuery As New OleDbCommand
        If TextBox1.Text <> "" Then
            TrvwClear()
            sqlQuery.CommandText = "SELECT udb_com.com, udb_member.name FROM (udb_com INNER JOIN udb_member ON udb_com.com = udb_member.com) WHERE (udb_com.com LIKE '%' + '" & TextBox1.Text & "' + '%') OR (udb_member.name LIKE '%' + '" & TextBox1.Text & "' + '%') ORDER BY udb_com.com, udb_member.name"
        Else
            sqlQuery.CommandText = "SELECT [No], [com] FROM [udb_com]"
        End If

        Dim ResultSet As DataSet = RunQuery(sqlQuery)
        Response.Write("資料列數量:" & ResultSet.Tables(0).Rows.Count - 1 & "<BR>")
        
        If ResultSet.Tables.Count > 0 Then
            Dim notsame As Integer = 0
            Dim same As Integer = 0
            Dim TreeNodeCount As Integer = TreeView1.Nodes.Count
            
            For rank As Integer = 0 To ResultSet.Tables(0).Rows.Count - 1
                
                Select Case rank
                    Case 0
                        Dim NewNode As TreeNode = New TreeNode(ResultSet.Tables(0).Rows.Item(0).Item(0))
                        NewNode.PopulateOnDemand = False
                        NewNode.SelectAction = TreeNodeSelectAction.Select
                        TreeView1.Nodes.Add(NewNode)
                        
                        Dim MemberNode As TreeNode = New TreeNode(ResultSet.Tables(0).Rows.Item(0).Item(1))
                        MemberNode.PopulateOnDemand = False
                        MemberNode.SelectAction = TreeNodeSelectAction.Select
                        TreeView1.Nodes(TreeView1.Nodes.IndexOf(NewNode)).ChildNodes.Add(MemberNode)

                    Case Else

                        If TreeView1.Nodes(TreeView1.Nodes.Count - 1).Value <> ResultSet.Tables(0).Rows.Item(rank).Item(0) Then
                            
                            Dim NewNode As TreeNode = New TreeNode(ResultSet.Tables(0).Rows.Item(rank).Item(0))
                            NewNode.PopulateOnDemand = False
                            NewNode.SelectAction = TreeNodeSelectAction.Select
                            TreeView1.Nodes.Add(NewNode)
                            
                            Dim MemberNode As TreeNode = New TreeNode(ResultSet.Tables(0).Rows.Item(rank).Item(1))
                            MemberNode.PopulateOnDemand = False
                            MemberNode.SelectAction = TreeNodeSelectAction.Select
                            
                            TreeView1.Nodes(TreeView1.Nodes.IndexOf(NewNode)).ChildNodes.Add(MemberNode)
                            
                        Else
                            Dim NewNode As TreeNode = New TreeNode(ResultSet.Tables(0).Rows.Item(rank).Item(1))
                            NewNode.PopulateOnDemand = False
                            NewNode.SelectAction = TreeNodeSelectAction.Select
                            
                            TreeView1.Nodes(TreeView1.Nodes.Count - 1).ChildNodes.Add(NewNode)
                            'Response.Write(TreeView1.Nodes.IndexOf(NewNode))
                            
 
                            
                            
                            'Response.Write(TreeView1.Nodes(TreeView1.Nodes.Count - 1).Value & " = " & ResultSet.Tables(0).Rows.Item(rank).Item(0) & "<BR>")
                        End If

                        
                End Select
 
            Next
               
            
        End If
        
        
    End Sub

    Sub addmember()
        
    End Sub
    Private Sub TrvwClear()
        Dim x As Integer
        With TreeView1.Nodes
            For x = .Count - 1 To 0 Step -1
                .RemoveAt(x)
            Next x
        End With
    End Sub



    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim Focus As Integer = TreeView1.Nodes.Count
        Response.Write(Focus)
    End Sub

    Protected Sub TreeView1_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        TreeView1.SelectedNode.Expand()
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body>

    <form id="form1" runat="server">
        <asp:TextBox ID="TextBox1" runat="server" Text="豐" />
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />


        <asp:Button ID="Button2" runat="server" Text="Button" />


        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>


        <asp:TreeView ID="TreeView1" runat="server" imageSet="Contacts"
NodeIndent="10" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged">
            <ParentNodeStyle Font-Bold="True" ForeColor="#5555DD" />
            <HoverNodeStyle Font-Bold="False" Font-Underline="False" ForeColor="Red" />
            <SelectedNodeStyle BackColor="#CCFFCC" Font-Bold="True" Font-Underline="True"
HorizontalPadding="0px" VerticalPadding="0px" />

            <NodeStyle Font-Names="新細明體" Font-Size="Small" ForeColor="Black"
HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" />
        </asp:TreeView>


    <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
DataKeyNames="No" DataSourceID="SqlDataSource2" Height="50px" Width="125px">
        <Fields>
        <asp:BoundField DataField="No" HeaderText="No" InsertVisible="False"
ReadOnly="True" SortExpression="No" />
        <asp:BoundField DataField="class" HeaderText="class" SortExpression="class" />
        <asp:BoundField DataField="com" HeaderText="com" SortExpression="com" />
        <asp:BoundField DataField="boss" HeaderText="boss" SortExpression="boss" />
        <asp:BoundField DataField="comno" HeaderText="comno" SortExpression="comno" />
        <asp:BoundField DataField="address" HeaderText="address"
SortExpression="address" />
        <asp:BoundField DataField="tel" HeaderText="tel" SortExpression="tel" />
        <asp:BoundField DataField="fax" HeaderText="fax" SortExpression="fax" />
        <asp:BoundField DataField="connect" HeaderText="connect"
SortExpression="connect" />
<asp:BoundField DataField="now" HeaderText="now" SortExpression="now" />
</Fields>
</asp:DetailsView>




<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString2 %>"
ProviderName="<%$ ConnectionStrings:ConnectionString2.ProviderName %>"

SelectCommand="SELECT [No], [com] FROM [udb_com] WHERE ([com] LIKE '%' + ? + '%')"
DeleteCommand="DELETE FROM [udb_com] WHERE [No] = ?"
InsertCommand="INSERT INTO [udb_com] ([No], [com]) VALUES (?, ?)"
UpdateCommand="UPDATE [udb_com] SET [com] = ? WHERE [No] = ?">
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" Name="com" PropertyName="Text"
Type="String" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="No" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="com" Type="String" />
<asp:Parameter Name="No" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="No" Type="Int32" />
<asp:Parameter Name="com" Type="String" />
</InsertParameters>
</asp:SqlDataSource>

<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString2 %>"
ProviderName="<%$ ConnectionStrings:ConnectionString2.ProviderName %>"
SelectCommand="SELECT * FROM [udb_com] WHERE ([com] = ?)">
<SelectParameters>
<asp:ControlParameter ControlID="TreeView1" Name="com" PropertyName="SelectedValue"
Type="String" />
</SelectParameters>
</asp:SqlDataSource>

</form>

</body>
</html>

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 魚魚 的頭像
    魚魚

    夏‧獵

    魚魚 發表在 痞客邦 留言(0) 人氣()