在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → C# 树形控件(treeview)开发示例源码

C# 树形控件(treeview)开发示例源码

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.12M
  • 下载次数:163
  • 浏览次数:2196
  • 发布时间:2019-01-08
  • 实例类别:C#语言基础
  • 发 布 人:hmlixiang
  • 文件格式:.rar
  • 所需积分:2
 相关标签: TreeView

实例介绍

【实例简介】我在之前很多文章里面,介绍过Winform主界面的开发,基本上都是标准的界面,在顶部放置工具栏,中间区域则放置多文档的内容,但是在顶部菜单比较多的时候,就需要把菜单分为几级处理,如可以在顶部菜单放置一二级菜单,这种方式在一般功能点不算太多的情况下,呈现的界面效果较为直观、也较为美观。不过随着一些系统功能的增多,这种方式可能就会显得工具栏比较拥挤,那么我们是否可以在左侧放置一个树形列表,这样通过树形列表的收缩折叠,就可以放置非常多的菜单功能了。

【实例截图】

from clipboard

【核心代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace TreeViewLearn
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnAddTotal_Click(object sender, EventArgs e)
        {
            if(string.IsNullOrEmpty(textBox1.Text.Trim()))
            {
                MessageBox.Show("请填写要添加的节点名称!");
                return;
            }
            string sql = "insert into TreeTest(nodeName,parentId) output inserted.id values" "(" " " "'" textBox1.Text.Trim() "'" "," "'" 0 "'" ")";
            int id = (int)sqlHelper.ExecuteScalar(sql);
            TreeNode node1 = new TreeNode();
            node1.Tag = id;
            node1.Text = textBox1.Text.Trim();
            treeView1.Nodes.Add(node1);
            textBox1.Text = "";
        }

        private void btnAddChild_Click(object sender, EventArgs e)
        {
            int id;
            if(string.IsNullOrEmpty(textBox1.Text.Trim()))
            {
                return;
            }
            if(treeView1.SelectedNode==null)
            {
                MessageBox.Show("请选择父节点");
                return;
            }
            id =(int)treeView1.SelectedNode.Tag;
            string sql = "insert into TreeTest(nodeName,parentId) output inserted.id values" "("   " "   "'"   textBox1.Text.Trim()   "'"   ","   "'"   id   "'"   ")";
            int id1 = (int)sqlHelper.ExecuteScalar(sql);
            TreeNode node1 = new TreeNode();
            node1.Tag = id1;
            node1.Text = textBox1.Text.Trim();
            treeView1.SelectedNode.Nodes.Add(node1);
            textBox1.Text = "";
        }

        private void treeView1_Leave(object sender, EventArgs e)
        {
            //失去焦点事件
            //treeView1.SelectedNode.BackColor = Color.Blue;
        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            textBox1.Text = treeView1.SelectedNode.Name;
        }

      

        private void Form1_Load(object sender, EventArgs e)
        {
         
            setTreeView(treeView1, 0);
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 fr = new Form2();
            fr.ShowDialog();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            SqlConnection connec = sqlHelper.getcon();
            if(connec.State==ConnectionState.Open)
            {
                MessageBox.Show(connec.State.ToString());
                MessageBox.Show("成功连接数据库");
            }
        }
        //调用的时候parentId以0值开始 setTreeView(treeView1, 0);
        private void setTreeView(TreeView tr1,int parentId)
        {
            string sql = "select * from TreeTest where parentId="   parentId;
          
            DataTable ds= sqlHelper.ExecuteDataTable(sql);
            if (ds.Rows.Count > 0)
            {
                int pId = -1;
                foreach (DataRow row in ds.Rows)
                {
                    TreeNode node = new TreeNode();
                    node.Text = row["nodeName"].ToString();
                    node.Tag = (int)row["id"];
                    pId = (int)row["parentId"];
                    if (pId == 0)
                    {
                        //添加根节点
                        tr1.Nodes.Add(node);
                    }
                    else
                    {
                        //添加根节点之外的其他节点
                        RefreshChildNode(tr1,node,pId);
                    }
                    //查找以node为父节点的子节点
                    setTreeView(tr1,(int)node.Tag);

                }
            }

        }
        //处理根节点的子节点
        private void RefreshChildNode(TreeView tr1,TreeNode treeNode, int parentId)
        {
            foreach (TreeNode node in tr1.Nodes)
            {
                if((int)node.Tag==parentId)
                {
                    node.Nodes.Add(treeNode);
                    return;
                }else if (node.Nodes.Count > 0)
                {
                    FindChildNode(node, treeNode,  parentId);
                }
            }
        }
        //处理根节点的子节点的子节点
        private void FindChildNode(TreeNode  tNode,TreeNode treeNode, int parentId)
        {

            foreach (TreeNode node in tNode.Nodes)
            {
                if ((int)node.Tag == parentId)
                {
                    node.Nodes.Add(treeNode);
                    return;
                }else if (node.Nodes.Count > 0)
                {
                    FindChildNode(node,treeNode,parentId);

                }

            }

        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if(treeView1.SelectedNode==null)
            {
                MessageBox.Show("请选择要删除的节点!");
                return;
            }
            //选中节点的主键id,也是其子节点的parentId
            int id = (int)treeView1.SelectedNode.Tag;
            nodeDelete(id);
            treeView1.SelectedNode.Remove();

        }
        //数据表中的数据的递归删除方法
        public void nodeDelete(int id)
        {
            string sql = "select * from TreeTest where parentId=" id;
            DataTable ds = sqlHelper.ExecuteDataTable(sql);
            if (ds.Rows.Count > 0)
            {
                //有子节点
                foreach(DataRow row in ds.Rows)
                {
                    //先删除父节点
                    string delete = "delete from TreeTest where id="   id;
                    int k = sqlHelper.ExecuteNonQuery(delete);
                    //查找子节点,删除
                    int id1 = (int)row["id"];
                    nodeDelete(id1);
                }
            }
            else
            { 
               //没有子节点
                string delete = "delete from TreeTest where id=" id;
                int k = sqlHelper.ExecuteNonQuery(delete);
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            treeView1.SelectedNode.Remove();
        }

        private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if(e.Action!=TreeViewAction.Unknown)
            {
                if(e.Node.Checked)
                {
                   
                }
            }
        }
    }
}

标签: TreeView

实例下载地址

网友评论

第 1 楼 gfpv_258 发表于: 2021-07-30 17:30 05
System.Data.SqlClient.SqlException:“对象名 'TreeTest' 无效。”

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警