treeview 控件使用和數據綁定


  一、TreeViewe 是由多個類來定義的,TreeView組件是由命名空間“System.Windows.Froms”中的“TreeView”類來定義的,而其中的節點(即Node),是由命名空間“System.Windows.Froms”中的“TreeNode”來定義的。所以在程序中創建一個TreeVirew對象,其實只是創建了一個可以防止檢點的“容器”。而在這個容器中加入一個節點,其實就是加入了從“TreeNode”類中創建的一個節點對象;同樣刪除一個節點,也就是刪除一個“TreeNode”對象。

  二、 C#操作TreeView組件中的一些常用方法以及具體實現:

  可以總結為三種基本操作:加入子節點、加入兄弟節點和刪除節點

  1.加入子節點

  所謂子節點,就是處於選定節點的下一級節點。加入子節點的具體過程是:首先要在TreeView組件中定位要加入的子節點的位置,然后創建一個節點對象,然后利用TreeVeiw類中對節點的加入方法(即:Add ( )方法),加入此節點對象。下面就是在treeView1組件中加入一個子節點的具體代碼:

 //首先判斷是否選定組件中的位置
        if (treeView1.SelectedNode == null)
        {
            MessageBox.Show("請選擇一個節點", "提示信息",
            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        else
        {
            //創建一個節點對象,並初始化
            TreeNode tmp;
            tmp = new TreeNode("節點名稱");
            //在TreeView組件中加入子節點
            treeView1.SelectedNode.Nodes.Add(tmp);
            treeView1.SelectedNode = tmp;
            treeView1.ExpandAll();
        } 

  2.加入兄弟節點

  

  所謂兄弟節點,就是在選定的節點的平級的節點。加入兄弟節點的方法和加入子節點的方法基本一致,只是在最后的實現方法上有着略微的區別。加入兄弟節點的具體步驟,首先也是要確定要加入的兄弟節點所處的位置,接着定義一個節點對象,最后調用TreeView類中對兄弟節點加入的方法,加入此節點對象。加入兄弟節點和加入子節點的最大區別就在於這最后一步。希望讀者能夠注意。下面是在TreeView組件加入一個兄弟節點的具體代碼:

//首先判斷是否選定組件中節點的位置
        if (treeView1.SelectedNode == null)
        {
            MessageBox.Show("請選擇一個節點", "提示信息",
            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        else
        {
            //創建一個節點對象,並初始化
            TreeNode tmp;
            tmp = new TreeNode(textBox1.Text);
            //在TreeView組件中加入兄弟節點
            treeView1.SelectedNode.Parent.Nodes.Add(tmp);
            treeView1.ExpandAll();
        } 

  3.刪除節點

  刪除節點就是刪除TreeView組件中選定的節點,刪除節點可以是子節點,也可以是兄弟節點,但無論節點的性質如何,必須保證要刪除的節點沒有下一級節點,否則必須先刪除此節點中的所有下一級節點,然后再刪除此節點。刪除節點比起上面的二個操作要顯得略微簡單,具體方法是:首先判斷要刪除的節點是否存在下一級節點,如果不存在,就調用TreeView類中的Remove ( )方法,就可以刪除節點了。下面是刪除TreeView組件中節點的具體代碼:

//判斷選定的節點是否存在下一級節點
if ( treeView1.SelectedNode.Nodes.Count == 0 )
//刪除節點
treeView1.SelectedNode.Remove ( ) ;
else
MessageBox.Show ( "請先刪除此節點中的子節點!" , "提示信
息" , MessageBoxButtons.OK , 
MessageBoxIcon.Information ) ; 

  4.TreeView組件的一些其他常用操作:

    < I > .展開所有節點:

    要展開TreeView組件中的所有節點,首先就要把選定的節點指針定位在TreeView組件的根節點上,然后調用選定組件的ExpandAll方法就可以了,下面是具體代碼:

//定位根節點
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//展開組件中的所有節點
treeView1.SelectedNode.ExpandAll ( ) ;

    < II > .展開選定節點的下一級節點:

    由於只是展開下一級節點,所以就沒有必要用ExpandAll ( )方法了。展開下一級節點只需要調用Expand ( )方法就可以了,下面是具體的實現代碼:

treeView1.SelectedNode.Expand ( ) ;

    

    < III > .折疊所有節點:

      折疊所有節點和展開所有節點是一組互操作,具體實現的思路也大致相同,折疊所有節點也是首先要把選定的節點指針定位在根節點上,然后調用選定組件的Collapse ( )就可以了,下面是具體的實現代碼:

//定位根節點
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//折疊組件中所有節點
treeView1.SelectedNode.Collapse ( ) ; 

  三、實例

using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows .Forms ;
using System.Data ;
namespace 全面掌握TreeView組件的使用方法
{
    /// Form1 的摘要說明。
    public class Form1 : Form
    {
        private TreeView treeView1 ;
        private Button button1 ;
        private Button button2 ;
        private Button button3 ;
        private MenuItem menuItem2 ;
        private MenuItem menuItem3 ;
        private MenuItem menuItem4 ;
        private ContextMenu contextMenu1 ;
        private TextBox textBox1 ;
        private Label label1 ;
        /// 必需的設計器變量。
        private System.ComponentModel.Container components = null ;
        public Form1 ( )
        {
            //初始化窗體中的組件
            InitializeComponent ( ) ;
        }
        /// 清理所有正在使用的資源。
        protected override void Dispose ( bool disposing )
        {
            if ( disposing )
            {
                if ( components != null )
                {
                    components.Dispose ( ) ;
                }
            }
            base.Dispose ( disposing ) ;
        }
        private void InitializeComponent ( )
        {
          //初始化代碼(略)
        }
        [ STAThread ]
        static void Main ( )
        {
            Application.Run ( new Form1 ( ) ) ;
        }
        private void AddChildNode ( )
        {
            //首先判斷是否選定組件中的位置
            if ( treeView1.SelectedNode == null )
            {
                MessageBox.Show ( "請選擇一個節點" , "提示信息" , 
                MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
            }
            else
            {
                if ( textBox1.Text != "" )
                {
                    //創建一個節點對象,並初始化
                    TreeNode tmp ;
                    tmp = new TreeNode ( textBox1.Text ) ;
                    //在TreeView組件中加入子節點
                    treeView1.SelectedNode.Nodes.Add ( tmp ) ;
                    treeView1.SelectedNode = tmp ;
                    treeView1.ExpandAll ( ) ;
                }
                else
                {
                    MessageBox.Show ( "TextBox組件必須填入節點名稱!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
                    return ;
                }
            }
        }
        private void AddParent ( )
        {
            //首先判斷是否選定組件中節點的位置
            if ( treeView1.SelectedNode == null )
            {
                MessageBox.Show ( "請選擇一個節點" , "提示信息" ,  MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
            }
            else
            {
                if ( textBox1.Text != "" )
                {
                    //創建一個節點對象,並初始化
                    TreeNode tmp ;
                    tmp = new TreeNode ( textBox1.Text ) ;
                    //在TreeView組件中加入兄弟節點
                    treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;
                    treeView1.ExpandAll ( ) ;
                }
                else
                {
                    MessageBox.Show ( "TextBox組件必須填入節點名稱!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
                    return ;
                }
            }
            TreeNode tnode = new TreeNode ( textBox1.Text ) ;
        }
        private void treeView1_MouseDown ( object sender , 
        MouseEventArgs e )
        {
            if ( e.Button == MouseButtons.Right )
            contextMenu1.Show ( this , new Point ( e.X , e.Y ) ) ;
        }
        private void button1_Click ( object sender , 
        System.EventArgs e )
        {
            treeView1.SelectedNode.Expand ( ) ;
        }
        private void menuItem2_Click ( object sender , 
        System.EventArgs e )
        {
            AddChildNode ( ) ;
        }
        private void menuItem3_Click ( object sender , 
        System.EventArgs e )
        {
            AddParent ( ) ;
        }
        private void menuItem4_Click ( object sender , 
        System.EventArgs e )
        {
            //判斷選定的節點是否存在下一級節點
            if ( treeView1.SelectedNode.Nodes.Count == 0 )
            //刪除節點
            treeView1.SelectedNode.Remove ( ) ;
            else
            MessageBox.Show ( "請先刪除此節點中的子節點!" , "提示信
            息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
        }
        private void button2_Click ( object sender , 
        System.EventArgs e )
        {
            //定位根節點
            treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
            //展開組件中的所有節點
            treeView1.SelectedNode.ExpandAll ( ) ;
        }
        private void button3_Click ( object sender , 
        System.EventArgs e )
        {
            //定位根節點
            treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
            //折疊組件中所有節點
            treeView1.SelectedNode.Collapse ( ) ;
        }
    }
}

  四、數據綁定

  默認展開樹的級別;0是不展開;1是展開一級;

  1.遞歸法

public partial class _Default : System.Web.UI.Page
{
    private void LoadTree(TreeNode parentNode)
    {
        List<ChinaStates> list = new chinabf().selectByCode(parentNode.Value);
        if (list.Count == 0)
        {
            return;
        }
        foreach (ChinaStates item in list)
        {
            TreeNode childNode = new TreeNode();
            childNode.Text = item.AreaName;
            childNode.Value = item.AreaCode;
            parentNode.ChildNodes.Add(childNode);
            LoadTree(childNode);
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        TreeNode root = new TreeNode();
        root.Text = "中國";
        root.Value = "0001";
        TreeView1.Nodes.Add(root);
        LoadTree(root);
    }
}

  2.for嵌套

public void treeBind()
{

    TreeNode root = new TreeNode();
    root.Text = "漢企數據通軟件有限公司";
    root.Value = "H001";
    root.SelectAction = TreeNodeSelectAction.None;
    TreeView1.Nodes.Add(root);
    List<Department> list = new Function().SelectPart();
    List<Worker> data=new List<Worker>();
    foreach (Department item in list)
    {
        TreeNode firstNode = new TreeNode();
        firstNode.Text = item.Department1;
        firstNode.Value = item.DepartCode;
        firstNode.SelectAction = TreeNodeSelectAction.None;
        root.ChildNodes.Add(firstNode);
        List<Worker>arr= new Function().SelectWorker(item.Department1);
        foreach (Worker workers in arr)
        {
            TreeNode child = new TreeNode();
            child.Text = workers.Wname;
            child.Value = workers.Wid.ToString();
            child.SelectAction = TreeNodeSelectAction.None;
            firstNode.ChildNodes.Add(child);
        }
    }
}

  3.遍歷所有子節點,找出選中項

protected void Button1_Click(object sender, EventArgs e)
{
    List<TreeNode> listNodes = new List<TreeNode>();
    foreach (TreeNode node in TreeView1.Nodes)
    {
        if (node != null)
        {
            FindCheckNode(node, listNodes);
        }
        else
        {
            return;
        }
    }
}

private void FindCheckNode(TreeNode node, List<TreeNode> listNodes)
{
    if (node.Checked)
    {
        listNodes.Add(node);
    }

    foreach (TreeNode childnode in node.ChildNodes)
    {

        FindCheckNode(childnode, listNodes);
    }
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM