【ASP.NET 進階】TreeView控件學習

這幾天上班沒事作,也很差打醬油,學點沒接觸過的新東西吧,基本瞭解了下TreeView控件。javascript

TreeView 控件用於在樹結構中顯示分層數據,例如目錄或文件目錄等。html

下面看代碼吧:java

1.效果圖node

 

 

2.靜態數據方式(即在頁面上使用標籤<asp:TreeNode>)web

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeViewTest.aspx.cs" Inherits="Yc_TestS.TreeViewTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>TreeView</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TreeView ID="treeT" runat="server">
            <Nodes>
                <asp:TreeNode  NavigateUrl="#" Text="城市" Expanded="True">
                    <asp:TreeNode NavigateUrl="#" Text="北京市"></asp:TreeNode>
                    <asp:TreeNode NavigateUrl="#" Text="上海市"></asp:TreeNode>
                    <asp:TreeNode NavigateUrl="#" Text="天津市"></asp:TreeNode>
                    <asp:TreeNode NavigateUrl="#" Text="重慶市"></asp:TreeNode>
                    <asp:TreeNode NavigateUrl="#" Text="湖北省">
                        <asp:TreeNode NavigateUrl="#" Text="武漢市"></asp:TreeNode>
                        <asp:TreeNode NavigateUrl="#" Text="黃岡市"></asp:TreeNode>
                        <asp:TreeNode NavigateUrl="#" Text="荊州市"></asp:TreeNode>
                        <asp:TreeNode NavigateUrl="#" Text="武穴市"></asp:TreeNode>
                        <asp:TreeNode NavigateUrl="#" Text="十堰市"></asp:TreeNode>
                        <asp:TreeNode NavigateUrl="#" Text="黃石市"></asp:TreeNode>
                    </asp:TreeNode>
                    <asp:TreeNode NavigateUrl="#" Text="河北省">
                        <asp:TreeNode NavigateUrl="#" Text="石家莊市"></asp:TreeNode>
                        <asp:TreeNode NavigateUrl="#" Text="唐山市"></asp:TreeNode>
                    </asp:TreeNode>
                    <asp:TreeNode NavigateUrl="#" Text="山西省">
                        <asp:TreeNode NavigateUrl="#" Text="太原市"></asp:TreeNode>
                        <asp:TreeNode NavigateUrl="#" Text="大同市"></asp:TreeNode>
                    </asp:TreeNode>
                </asp:TreeNode>
            </Nodes>
        </asp:TreeView>
    </div>
    </form>
</body>
</html>
TreeViewTest.aspx

 

3.前臺數據源綁定方式sql

a.xml數據數據庫

<?xml version="1.0" encoding="utf-8" ?>
<Area  iAreaID ="0" cAreaName="城市">
  <Province iAreaID ="1" cAreaName="北京市"/>
  <Province iAreaID ="2" cAreaName="上海市"/>
  <Province iAreaID ="3" cAreaName="天津市"/>
  <Province iAreaID ="4" cAreaName="重慶市"/>
  <Province iAreaID ="5" cAreaName="湖北省">
    <City iAreaID ="51" cAreaName="武漢市"/>
    <City iAreaID ="52" cAreaName="黃岡市" />
    <City iAreaID ="53" cAreaName="荊州市"/>
    <City iAreaID ="54" cAreaName="武穴市" />
    <City iAreaID ="55" cAreaName="十堰市"/>
    <City iAreaID ="56" cAreaName="黃石市" />
  </Province>
  <Province iAreaID ="6" cAreaName="河北省">
    <City iAreaID ="61" cAreaName="石家莊市"/>
    <City iAreaID ="62" cAreaName="唐山市" />
  </Province>
  <Province iAreaID ="7" cAreaName="山西省">
    <City iAreaID ="71" cAreaName="太原市" />
    <City iAreaID ="72" cAreaName="大同市" />
  </Province>
</Area>
Area.xml

 

b.前臺頁面(這裏綁定了Xml的數據源)app

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeViewTest.aspx.cs" Inherits="Yc_TestS.TreeViewTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>TreeView</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <%--TreeView控件的DataSourceID屬性指定數據源控件源ID。--%>
        <asp:TreeView ID="treeT" runat="server" DataSourceID="XmlDataSource1">          
        </asp:TreeView>
        <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Xml/Area.xml">
        </asp:XmlDataSource>
    </div>
    </form>
</body>
</html>
TreeViewTest.aspx

 

c.後臺代碼ide

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Data;
using Yc_TestS.BaseClass;

namespace Yc_TestS
{
    public partial class TreeViewTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * TreeNodeBinding類在TreeView控件中定義數據項與該數據項綁定到的節點之間的關係。
             * 該類的DataMember屬性指定在節點顯示的數據源對應XML的節點。
             * ValueField屬性對應TreeNode對象的Value屬性。
             * TreeNodeBinding類的Text屬性指定向用戶顯示的文本, 若是該屬性沒有指定,則默認與ValueField屬性相同。
             * */

            this.treeT.ShowLines = false;//顯示鏈接子節點和父節點之間的線條
            TreeNodeBinding Area = new TreeNodeBinding();
            Area.DataMember = "Area";//指定綁定的成員
            Area.ValueField = "cAreaName";//取值的字段
            this.treeT.DataBindings.Add(Area);
            TreeNodeBinding Province = new TreeNodeBinding();
            Province.DataMember = "Province";//添加與"省份"綁定
            Province.ValueField = "cAreaName";
            this.treeT.DataBindings.Add(Province);
            TreeNodeBinding City = new TreeNodeBinding();
            City.DataMember = "City";//添加與"城市"綁定
            City.ValueField = "cAreaName";
            this.treeT.DataBindings.Add(City);

        }

    }
}
TreeViewTest.aspx.cs

 

4.後臺數據庫數據填充方式ui

a.數據庫數據

b.前臺頁面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeViewTest.aspx.cs" Inherits="Yc_TestS.TreeViewTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>TreeView</title>
    <script type="text/javascript">
        function show(msg) {
            alert(msg);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TreeView ID="treeT" runat="server">
        </asp:TreeView>
    </div>
    </form>
</body>
</html>
TreeViewTest.aspx

 

c.後臺代碼

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Data;
using Yc_TestS.BaseClass;

namespace Yc_TestS
{
    public partial class TreeViewTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            AddTree(0, null);
        }

        private void AddTree(int Pid, TreeNode PNode)
        {
            string sqlStr = "SELECT Item_id,Item_name,Parent_ID FROM Para_item";
            DataTable dt = YSqlHelper.ExecuteQuery(sqlStr, CommandType.Text);
            if (dt.Rows.Count > 0)
            {
                DataView dv = new DataView(dt);
                //過濾ParentID,獲得當前的全部子節點 ParentID爲父節點ID
                dv.RowFilter = "[Parent_ID] = " + Pid;
                //循環遞歸
                foreach (DataRowView Row in dv)
                {
                    //聲明節點
                    TreeNode Node = new TreeNode();
                    //綁定超級連接
                    Node.NavigateUrl = String.Format("javascript:show('{0}')", Row["Item_Name"].ToString());
                    //開始遞歸
                    if (PNode == null)
                    {
                        //添加根節點
                        Node.Text = Row["Item_Name"].ToString();
                        treeT.Nodes.Add(Node);
                        Node.Expanded = true; //節點狀態展開
                        AddTree(Int32.Parse(Row["Item_ID"].ToString()), Node);    //再次遞歸
                    }
                    else
                    {
                        //添加當前節點的子節點
                        Node.Text = Row["Item_Name"].ToString();
                        PNode.ChildNodes.Add(Node);
                        Node.Expanded = true; //節點狀態展開
                        AddTree(Int32.Parse(Row["Item_ID"].ToString()), Node);     //再次遞歸
                    }
                }
            }
        }
    }
}
TreeViewTest.aspx.cs

 

d.配置文件

<?xml version="1.0"?>
<!--
  有關如何配置 ASP.NET 應用程序的詳細消息,請訪問
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  
  <appSettings>
    <add key="sqlStr" value="0dd8de75eb51766d66d42ead8ea26b0c533f6fdb009e9fd2e6e1c9867d2766ec499405047e4173a74015f57800e3afb982fd39d96dcc1590c8c943242992c84b "/>
  </appSettings>
    <system.web>
        <compilation debug="true"/>
    </system.web>
</configuration>
Web.config

 

e.兩個助手類 

using System;
using System.Collections.Generic;
using System.Web;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace Yc_TestS.BaseClass
{
    public class EntryCode
    {
        /// <summary>加密</summary>
        public static string EncodeCode(string str)
        {
            string key = "david.yc";
            DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
            provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, 8));
            provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, 8));
            byte[] bytes = Encoding.GetEncoding("GB2312").GetBytes(str);
            MemoryStream stream = new MemoryStream();
            CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);
            stream2.Write(bytes, 0, bytes.Length);
            stream2.FlushFinalBlock();
            StringBuilder builder = new StringBuilder();
            foreach (byte num in stream.ToArray())
            {
                builder.AppendFormat("{0:X2}", num);
            }
            stream.Close();
            return builder.ToString().Trim();
        }

        /// <summary> Des 解密 GB2312  </summary>
        public static string DecodeCode(string str)
        {
            string key = "david.yc";
            DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
            provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, 8));
            provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, 8));
            byte[] buffer = new byte[str.Length / 2];
            for (int i = 0; i < (str.Length / 2); i++)
            {
                int num2 = Convert.ToInt32(str.Substring(i * 2, 2), 0x10);
                buffer[i] = (byte)num2;
            }
            MemoryStream stream = new MemoryStream();
            CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write);
            stream2.Write(buffer, 0, buffer.Length);
            stream2.FlushFinalBlock();
            stream.Close();
            return Encoding.GetEncoding("GB2312").GetString(stream.ToArray()).Trim();
        }
    }
}
加密和解密(EntryCode.cs)
using System;
using System.Collections.Generic;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace Yc_TestS.BaseClass
{
    public class YSqlHelper
    {
        private static string connectionString = EntryCode.DecodeCode(ConfigurationManager.AppSettings["sqlStr"]);//獲取解密後的數據庫鏈接字符串

        /// <summary>執行不帶參數的增刪改SQL語句或存儲過程</summary>
        /// <param name="cmdText">增刪改SQL語句或存儲過程</param>
        /// <param name="ct">命令類型</param>
        /// <returns>受影響的行數</returns>
        public static int ExecuteNonQuery(string cmdText, CommandType ct)
        {
            int res = 0;
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                try
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                    {
                        cmd.CommandType = ct;
                        res = cmd.ExecuteNonQuery();
                    }
                }
                catch
                {

                }
                finally
                {
                    if (conn.State == ConnectionState.Open)
                    {
                        conn.Close();
                    }
                }
            }
            return res;
        }

        /// <summary>執行帶參數的增刪改SQL語句或存儲過程</summary>
        /// <param name="cmdText">增刪改SQL語句或存儲過程</param>
        /// <param name="ct">命令類型</param>
        /// <returns>受影響的行數</returns>
        public static int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct)
        {
            int res = 0;
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                try
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                    {
                        cmd.CommandType = ct;
                        cmd.Parameters.AddRange(paras);
                        res = cmd.ExecuteNonQuery();
                    }
                }
                catch
                {

                }
                finally
                {
                    if (conn.State == ConnectionState.Open)
                    {
                        conn.Close();
                    }
                }
            }
            return res;
        }

       /// <summary> 執行帶參數的查詢SQL語句或存儲過程</summary>
        /// <param name="cmdText">查詢SQL語句或存儲過程ì</param>
        /// <param name="paras">參數集合?</param>
        /// <param name="ct">命令類型</param>
        /// <returns>DataTable對象</returns>
        public static DataTable ExecuteQuery(string cmdText, CommandType ct)
        {
            DataTable dt = new DataTable();
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                try
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                    {
                        cmd.CommandType = ct;
                        using (SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            dt.Load(sdr);
                        }
                    }
                }
                catch
                {

                }
                finally
                {
                    if (conn.State == ConnectionState.Open)
                    {
                        conn.Close();
                    }
                }
            }
            return dt;
        }

        /// <summary> 執行帶參數的查詢SQL語句或存儲過程</summary>
        /// <param name="cmdText">查詢SQL語句或存儲過程ì</param>
        /// <param name="paras">參數集合?</param>
        /// <param name="ct">命令類型</param>
        /// <returns>DataTable對象</returns>
        public static DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
        {
            DataTable dt = new DataTable();
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                try
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                    {
                        cmd.CommandType = ct;
                        cmd.Parameters.AddRange(paras);
                        using (SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            dt.Load(sdr);
                        }
                    }
                }
                catch
                {

                }
                finally
                {
                    if (conn.State == ConnectionState.Open)
                    {
                        conn.Close();
                    }
                }
            }
            return dt;
        }

    }
}
SQL數據庫助手類(YSqlHelper.cs)

 

 5.一些方法記錄

a.控制父結點的開/合狀態

TreeView_Tree.GetNodeFromIndex("1").Expanded=false/true;

 

b.清除某個父結點下的全部子節點

TreeView_IndexLeft.GetNodeFromIndex("1").Nodes.Clear();

 

c.設置所選節點,如選中第二個節點 

function SetSelNode()  {   TreeView_Tree.selectedNodeIndex="1";  } 

 

d.獲得所選節點的Text,ID或NodeData 

function GetAttribute()  {   alert(TreeView_Tree.getTreeNode(TreeView_Tree.selectedNodeIndex).getAttribute("Text"));  } 

//替換Text爲ID或NodeData,可分別獲得所選節點的ID或NodeData 

 

e.修改節點屬性,如修改第一個節點的Text 

function ModifyNode()  {   var node=TreeView_Tree.getTreeNode("0");   node.setAttribute("Text","第一個節點");  } 

 

f.添加節點 

function AddNode()  {   var node=TreeView_Tree.createTreeNode();   node.setAttribute("Text","第一個節點");   TreeView_Tree.add(node);      } 

 

g.TreeView 中的SelectedIndexChange不執行

AutoPostBack=true,SelectedIndexChange才能被執行。 

 

h.判斷 TreeView 的一個節點下是否有子節點 

if(SelectNode.Nodes.Count==0) {    //該節點沒有字節點  } 

相關文章
相關標籤/搜索