用c#做的一个目录树(可新建、删除、重命名)

这篇博客介绍了如何使用C#创建一个目录树,并实现从数据库加载、添加新节点、删除节点和重命名节点的功能。通过SQL连接与数据库交互,动态加载和更新树形结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库表结构:

create table tree(
nd_id integer primary key not null,
nd_parent integer,
nd_text varchar(20)
)

 

 

 

代码文件

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

namespace 数据库_树结构
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //加载目录树
            gettreeview(); 
        }
        /// <summary>
        /// 向数据库传输数据
        /// </summary>
        /// <param name="str"></param>
        private void connect(string str)
        {
            string sqlcon = "Data Source = (local);Database = treedb; User ID =sa; PWD = ''";
            SqlConnection sqlconn = new SqlConnection(sqlcon);
            sqlconn.Open();
            SqlCommand com = new SqlCommand(str, sqlconn);
            com.ExecuteNonQuery();
            sqlconn.Close();
        }
        /// <summary>
        /// 目录树加载
        /// </summary>
        private void gettreeview()
        {
            string constr = " Data Source = (local); DataBase = treedb; User ID =sa; PWD = ''";
            SqlConnection con = new SqlConnection(constr);
            con.Open();
            string sqlstr = " select * from tree";
            SqlDataAdapter sqldataadapter = new SqlDataAdapter(sqlstr, con);
            DataSet ds = new DataSet();
            sqldataadapter.Fill(ds, "tree");
            con.Close();

            // 加载根结点
            TreeNode tn = new TreeNode();
            tn.Text = "系统文件夹";
            tn.Name = "0";
            tn.Tag = "0";
            treeView1.Nodes.Add(tn);
            treeView1.SelectedNode = tn;

            // 加载子结点
            if (ds != null)
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    tn = new TreeNode();
                    tn.Text = dr["nd_text"].ToString();
                    tn.Name = dr["nd_id"].ToString();
                    tn.Tag = dr["nd_parent"].ToString();
                    if (treeView1.SelectedNode != tn.Tag)
                    {
                        TreeNode[] tn_temp = treeView1.Nodes.Find(dr["nd_parent"].ToString(), true);
                        if (tn_temp.Length > 0)
                        {
                        treeView1.SelectedNode = tn_temp[0];
                        }
                    }
                    treeView1.SelectedNode.Nodes.Add(tn);
                }
            }
            //展开所有结点并且光标返回根结点
            treeView1.ExpandAll();
            treeView1.SelectedNode = treeView1.TopNode;
        }
        /// <summary>
        /// 添加结点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void newToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TreeNode tn = new TreeNode();
            tn.Text = "新建文件夹";
            int i = Convert.ToInt32(treeView1.SelectedNode.Name);
            treeView1.SelectedNode.Nodes.Add(tn);

            string str1, str2;
            str1 = "declare @a integer,@b integer  set @a =(select max(nd_id)+1 from tree) set @b = " + i + "";
            str2 = "insert into tree(nd_id,nd_parent,nd_text) values (@a,@b,'新建文件夹') ";
            connect(str1 + str2);
           
            treeView1.Nodes.Clear();
            gettreeview(); 
        }
        /// <summary>
        /// 删除结点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (treeView1.SelectedNode.IsExpanded == false)
            {
                int i = Convert.ToInt32(treeView1.SelectedNode.Name);
                treeView1.SelectedNode.Remove();

                string str1, str2;
                str1 = "declare @a integer set @a = " + i + "";
                str2 = "delete from tree where nd_id = @a";
                connect(str1 + str2);
            }
            else
            {
                MessageBox.Show("此文件夹非空,不能删除", "错误提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

        }
        /// <summary>
        /// 重命名结点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void renameToolStripMenuItem_Click(object sender, EventArgs e)
        {
            treeView1.LabelEdit = true;
            treeView1.SelectedNode.BeginEdit();
        }
        /// <summary>
        /// 结点重命名后触发的事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
            treeView1.SelectedNode.EndEdit(true);
            treeView1.LabelEdit = false;

            string nodename = e.Label;
            int i = Convert.ToInt32(treeView1.SelectedNode.Name);

            string str1, str2;
            str1 = "declare @a varchar(20) set @a = '" + nodename + "'";
            str2 = " update tree set nd_text = @a where nd_id = " + i + "";
            connect(str1 + str2);
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值