• 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);
        }
    }
    

      

  • 相关阅读:
    【原生】数组去重的方法
    【原生】详解Javascript中prototype属性(推荐)
    【原生】 ES5中的构造函数与 ES6 中的类 及构造函数的理解
    【react】React学习:状态(State) 和 属性(Props)
    【react】 flux 了解
    【请求数据】fetch 的get请求和post请求
    【react】 使用create-react-app创建react项目,运行npm run eject报错: 暴露webpack配置文件
    package.json 文件的介绍
    802.11协议精读1:学习资料整理(转)
    ns2之包结构解析
  • 原文地址:https://www.cnblogs.com/shaobing012/p/4877789.html
Copyright © 2020-2023  润新知