C#递归增加、删除树节点(TreeView)(转载于互联网)

C#递归增加、删除树节点(TreeView)

(2009-11-02 19:49:24)
标签:

it

分类:c#程序设计

C#递归增加、删除树节点(TreeView)数据库设计:

  C#递归增加、删除树节点(TreeView)

C#递归增加、删除树节点(TreeView)使用存储过程找出所有的子节点(用于删除节点)

create PROCEDURE UserClassDeleteAllNodeUsedProcedure
@ClassID nchar(10)
AS
 declare @id int 
 set @id=@ClassID;
 with RootNodeCTE(id,ParentID)
 as
 (
  Select ClassID,ParentID from Tb_UserClass
  where ParentID in (@id)
    
  Union all
  Select Tb_UserClass.ClassID,Tb_UserClass.ParentID
  From RootNodeCTE
  inner join Tb_UserClass on RootNodeCTE.id=Tb_UserClass.ParentID
 )
 delete from Tb_UserClass
 Where ClassID In
 (
  Select id from RootNodeCTE
  union all
  Select @classid
 )

C#递归增加、删除树节点(TreeView)递归源码:

using System;
using System.Collections.Generic;
using System.Text;

using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data;
namespace Comm
{
    public class TreeView
    {
        QueryLibrary.QuerySql query; //执行sql命令
        SqlCommand cmd;
        public TreeView()
        {
            query = new QueryLibrary.QuerySql();
            cmd = new SqlCommand();
            cmd.CommandType = CommandType.StoredProcedure;

        }

        /// <summary>
        /// 节点初始化
        /// </summary>
        /// <param name="TNode"></param>
        public void UserClass GetNodeInit_r(TreeNode TNode)
        {
            DataSet ds = new DataSet();
            cmd.CommandText = "UserClassGet";
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@ParentID", SqlDbType.NChar, 10).Value = TNode.Tag;

            try
            {
                ds=query. GetDataSet_r(cmd);
            }
            catch{}

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                TreeNode TN_Parent = new TreeNode();
                TreeNode TN_child = new TreeNode();
                TN_Parent = TNode;

                TN_child.Tag = dr["ClassID"].ToString();
                TN_child.Text = dr["ClassName"].ToString();

                TNode.Nodes.Add(TN_child);

                UserClass GetNodeInit_r(TN_child);
            }
        }

        /// <summary>
        /// 查找所选节点
        /// </summary>
        /// <param name="TNode"></param>
        /// <returns></returns>
        public DataSet UserClass Get_r(TreeNode TNode)
        {
            DataSet ds = new DataSet();
            cmd.CommandText = "UserClassGet";
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@ParentID", SqlDbType.NChar, 10).Value = TNode.Tag;

            try
            {
                ds = query. GetDataSet_r(cmd);
            }
            catch { }
         return ds;
        }
        /// <summary>
        /// 节点增加
        /// </summary>
        /// <param name="ClassID"></param>
        /// <param name="ClassName"></param>
        /// <param name="ParentID"></param>
        /// <returns></returns>
        public bool UserClassADD(string ClassID,string ClassName,string ParentID)
        {
            cmd.CommandText = "UserClassADD";
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@ClassID", SqlDbType.NChar, 10).Value = ClassID.Trim();
            cmd.Parameters.Add("@ClassName", SqlDbType.NChar, 10).Value = ClassName.Trim();
            cmd.Parameters.Add("@ParentID", SqlDbType.NChar, 10).Value = ParentID.Trim();

            try
            {
                int i = query.IntExecuteNonQuery(cmd);
                if (i > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }
        public int UserClass GetMaxClassID_r()
        {
            cmd.CommandText = "UserClassGetMaxClassID";
            cmd.Parameters.Clear();
            try
            {
                int i = Convert.ToInt32(query. GetScalar_r(cmd));
                return i;
            }
            catch
            {
                return -1;
            }
        }
        /// <summary>
        /// 使用存储过程删除子节点
        /// </summary>
        /// <param name="ClassID"></param>
        /// <returns></returns>
        public bool UserClassDeleteAllNodeUsedProcedure(string ClassID)
        {
            cmd.CommandText = "UserClassDeleteAllNodeUsedProcedure";
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@ClassID", SqlDbType.NChar, 10).Value = ClassID.Trim();

 

            int i = query.IntExecuteNonQuery(cmd);


            if (i > 0)
            {
                return true;
            }
            else
            {
                return false;
            }

        }


        #region 递归删除子节点
        /// <summary>
        /// 递归删除子节点
        /// </summary>
        /// <param name="TNode"></param>
        /// <returns></returns>
        public bool UserClassDeleteNode(TreeNode TNode)
        {
            DelNode(TNode);
            DataSet ds = new DataSet();
            cmd.CommandText = "UserClassGet";
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@ParentID", SqlDbType.NChar, 10).Value = TNode.Tag;

            try
            {
                ds = query. GetDataSet_r(cmd);
            }
            catch { }

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                TreeNode TN_Parent = new TreeNode();
                TreeNode TN_child = new TreeNode();
                TN_Parent = TNode;

                TN_child.Tag = dr["ClassID"].ToString();
                TN_child.Text = dr["ClassName"].ToString();

                TNode.Nodes.Remove(TN_child);

                UserClassDeleteNode(TN_child);
            }
            return true;
        }
        void DelNode(TreeNode TNode)
        {
            DataSet ds = new DataSet();
            cmd.CommandText = "UserClassDeleteNode";
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@ClassID", SqlDbType.NChar, 10).Value = TNode.Tag;

            query.IntExecuteNonQuery(cmd);
        }
        #endregion


        /// <summary>
        /// 递归查找节点
        /// </summary>
        /// <param name="current"></param>
        /// <param name="NodeText"></param>
        /// <returns></returns>
        public TreeNode NodeFind(TreeNode current, string NodeText)
        {
            if (current == null)
            {
                return null;
            }
            if (current.Text.Trim() == NodeText.Trim())
            {
                return current;
            }
            TreeNode tn=null;
            foreach (TreeNode TNode in current.Nodes)
            {
                tn=NodeFind(TNode,NodeText);
                if (tn != null)
                {
                    break;
                }
            }
            return tn;
        }

        /// <summary>
        /// 节点更新
        /// </summary>
        /// <param name="ClassID"></param>
        /// <param name="ClassName"></param>
        /// <returns></returns>
        public bool UserClassUpadate(string ClassID,string ClassName)
        {
            cmd.CommandText = "UserClassUpadate";
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@ClassID", SqlDbType.NChar, 10).Value = ClassID.Trim();
            cmd.Parameters.Add("@ClassName", SqlDbType.NVarChar, 50).Value = ClassName.Trim();

            int i = query.IntExecuteNonQuery(cmd);


            if (i > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}
C#递归增加、删除树节点(TreeView)增加节点:

private void btnAdd_Click(object sender, EventArgs e)
        {
            TreeNode tn_curent =treeView1.SelectedNode; //获取当前选择的节点
            string nodeTag = logic.UserClass GetMaxClass_r().ToString();
            if (txtNode.Text != String.Empty)
            {
                if (tn_curent !=null)
                {
                    if (logic.UserClassADD(nodeTag,txtNode.Text.Trim(), tn_curent.Tag.ToString()))
                    {

                        TreeNode tn_child = new TreeNode();

                        tn_child.Tag = nodeTag;
                        tn_child.Text = txtNode.Text.Trim();

                        tn_curent.Nodes.Add(tn_child);
                        tn_curent.ExpandAll();
                    };                  
                }
                else
                {
                    logic.UserClassADD(nodeTag,txtNode.Text.Trim(), "0");
                }
            }
        }

C#递归增加、删除树节点(TreeView)删除节点:

 private void btnDelete_Click(object sender, EventArgs e)
        {
            TreeNode tn_curent = treeView1.SelectedNode;
            if (tn_curent != null)
            {
                //if (logic.UserClassDeleteAllNodeUsedProcedure(tn_curent.Tag.ToString())) //使用数据库存储过程删除
                //{
                //    treeView1.Nodes.Remove(tn_curent);                   
                //};
                if(logic.UserClassDeleteNode(tn_curent)) //使用递归删除
                {
                    treeView1.Nodes.Remove(tn_curent);
                }
            }
            else
            {
                MessageBox.Show("请选择节点!");
            }

        }

C#递归增加、删除树节点(TreeView)节点初始化:

private void btnNodeInit_Click(object sender, EventArgs e)
        {
            TreeNode tnode = new TreeNode();

            tnode.Tag = 0;
            tnode.Text = "主节点(树)";
            logic.UClassNodeInit(tnode);

 
            treeView1.Nodes.Clear();
            treeView1.Nodes.Add(tnode);
            treeView1.ExpandAll();
        }

 

原创:http://blog.sina.com.cn/s/blog_603c32ed0100frf3.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值