跳到主要內容

ASP.NET TreeView

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeViewTest.aspx.cs" Inherits="VS2013Test.RightMgm.TreeViewTest" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script language="javascript" type="text/javascript">
        function postBackByObject() {
            var o = window.event.srcElement;
            if (o.tagName == "INPUT" && o.type == "checkbox") {
                __doPostBack("", "");
            }
        }
    </script>
</head>

<body>
    <form id="form1" runat="server">
  
        <asp:TreeView ID="TreeView1" runat="server" ShowLines="True"
            onclick="javascript:postBackByObject()"
            OnSelectedNodeChanged="TreeView1_SelectedNodeChanged"
            OnTreeNodeCheckChanged="TreeView1_TreeNodeCheckChanged">
        </asp:TreeView>
      
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
      
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

    &nbsp;&nbsp;&nbsp;&nbsp;
        <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="EXPEND" />
&nbsp;
        <asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="COLSPEND" />
&nbsp;&nbsp;
        <asp:Button ID="Button4" runat="server" OnClick="Button4_Click" Text="SetSelectNode" />

    </form>
</body>
</html>

----------------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace VS2013Test.RightMgm
{
    public partial class TreeViewTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //TreeNode newNode = null;
                //newNode = new TreeNode("1");
                //newNode.ShowCheckBox = true;
                //TreeView1.Nodes.Add(newNode);
                //newNode = new TreeNode("11");
                //newNode.ShowCheckBox = true;
                //TreeView1.Nodes[0].ChildNodes.Add(newNode);
                //newNode = new TreeNode("12");
                //newNode.ShowCheckBox = true;
                //TreeView1.Nodes[0].ChildNodes.Add(newNode);
                //newNode = new TreeNode("2");
                //newNode.ShowCheckBox = true;
                //TreeView1.Nodes.Add(newNode);
                //newNode = new TreeNode("21");
                //newNode.ShowCheckBox = true;
                //TreeView1.Nodes[1].ChildNodes.Add(newNode);
                //newNode = new TreeNode("22");
                //newNode.ShowCheckBox = true;
                //TreeView1.Nodes[1].ChildNodes.Add(newNode);

                TreeNode root = new TreeNode("root");
              
                TreeNode level1 = new TreeNode();
                level1.Text = "1";
                level1.Value = "1";
                level1.ShowCheckBox = true;
                TreeNode child = new TreeNode("11");
                child.ShowCheckBox = true;
                level1.ChildNodes.Add(child);
                child = new TreeNode("12");
                child.ShowCheckBox = true;
                level1.ChildNodes.Add(child);
                //TreeView1.Nodes.Add(level1);
                root.ChildNodes.Add(level1);
                //--------------------------------
                level1 = new TreeNode("2", "2");
                level1.ShowCheckBox = true;
                child = new TreeNode("21");
                child.ShowCheckBox = true;
                level1.ChildNodes.Add(child);
                child = new TreeNode("22");
                child.ShowCheckBox = true;
                level1.ChildNodes.Add(child);
                //TreeView1.Nodes.Add(level1);
                root.ChildNodes.Add(level1);

                TreeView1.Nodes.Add(root);
            }
        }

        //取得所有勾選的node的值
        protected void Button1_Click(object sender, EventArgs e)
        {
            string strText = string.Empty;
            foreach (TreeNode oNode in this.TreeView1.CheckedNodes)
            {
                if (oNode.Checked)
                {
                    strText += oNode.Text + "/" ;
                }
            }
            TextBox1.Text = strText;
        }
        protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
        {
            TextBox1.Text = TreeView1.SelectedNode.Text;
        }

        //要加上 function postBackByObject()
        protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
        {
            //if (TreeView1.CheckedNodes.Count > 0)
            //{
            //    foreach (TreeNode node in TreeView1.CheckedNodes)
            //    {
            //        TextBox1.Text += node.Text + "/";
            //    }
            //}
            if(e.Node.Checked == true)    //勾選父 連動子全勾選
            {
                if (e.Node.ChildNodes.Count > 0)
                {
                    foreach(TreeNode node in e.Node.ChildNodes)
                    {
                        node.Checked = true;
                    }
                }
            }
            if (e.Node.Checked == false)   //子取消勾選 連動父取消勾選
            {
                if (e.Node.Parent != null)
                {
                    e.Node.Parent.Checked = false;
                }
            }
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            TreeView1.ExpandAll();
        }
        protected void Button3_Click(object sender, EventArgs e)
        {
            TreeView1.CollapseAll();  
        }

        //設定選取的node
        protected void Button4_Click(object sender, EventArgs e)
        {
            foreach (TreeNode n in TreeView1.Nodes)
            {
                SelectNodeByValue(n,"21");
            }
        }
        protected void SelectNodeByValue(TreeNode Node, string ValueToSelect)
        {
            foreach (TreeNode n in Node.ChildNodes)
            {
                if (n.Text == ValueToSelect)     //看用value or text找
                {
                    n.Select();
                    n.Checked = true;
                }
                else
                {
                    SelectNodeByValue(n, ValueToSelect);
                }
            }
        }

    }
}