⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treeclass.cs

📁 C#编写的应用程序
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.ComponentModel;

namespace Function_Ontology
{
    /// <summary>
    /// 改类主要实现树形结构的显示和相关数据库的操作。
    /// </summary>
    public class TreeClass 
    {
        private DatabaseLayer mydbl;
        private string tablename;
        private string columID;
        private string columName;
        private string columDescription;
        private string columFatherID;

        /// <summary>
        /// 构造函数1
        /// </summary>
        /// <param name="ConnectionString">连接字符串</param>
        /// <param name="tableName">数据表名</param>
        /// <param name="ID">ID项字段名</param>
        /// <param name="Name">名称项字段名</param>
        /// <param name="FatherID">父节点ID字段名</param>
        public TreeClass(string ConnectionString, string tableName, string ID, string Name, string FatherID)
        {
            mydbl = new DatabaseLayer(ConnectionString);
            tablename = tableName;
            columID = ID;
            columName = Name;            
            columFatherID = FatherID;
        }

        /// <summary>
        /// 构造函数2
        /// </summary>
        /// <param name="ConnectionString">连接字符串</param>
        /// <param name="tableName">数据表名</param>
        /// <param name="ID">ID项字段名</param>
        /// <param name="Name">名称项字段名</param>
        /// <param name="Description">描述信息</param>
        /// <param name="FatherID">父节点ID字段名</param>
        public TreeClass(string ConnectionString, string tableName, string ID, string Name, string Description, string FatherID)
        {
            mydbl = new DatabaseLayer(ConnectionString);
            tablename = tableName;
            columID = ID;
            columName = Name;
            columDescription =Description;
            columFatherID = FatherID;
        }

        /// <summary>
        /// 构建树形结构。此方法是一个递归过程。
        /// </summary>
        /// <param name="Belong">传入查找父节点</param>
        /// <param name="treenode">要查找的树形节点</param>
        private void CreateTreeView(int Belong, TreeNode treenode)
        {

            DataTable dt = new DataTable();
            string sqlstr = "select * from " + tablename + " where "+columFatherID+"=";
            sqlstr += Belong.ToString();
            dt = mydbl.GetDataTable(sqlstr);
            //遍历结果集,添加节点。            
            foreach (DataRow dr in dt.Rows)
            {
                TreeNode tr = new TreeNode();
                tr.Tag = dr.ItemArray[0].ToString().Trim();
                tr.Text = dr.ItemArray[1].ToString().Trim();
                tr.ExpandAll();
                treenode.Nodes.Add(tr);
                //将该节点作为下级查询的父节点条件。
                int fatherid = int.Parse(dr.ItemArray[0].ToString().Trim());
                //递归调用。
                this.CreateTreeView(fatherid, tr);
            }
        }

        /// <summary>
        /// 构建树形结构。此方法是一个递归过程。
        /// </summary>
        /// <param name="Belong">传入查找父节点</param>
        /// <param name="sqlvalue">查找条件</param>
        /// <param name="treenode">要查找的树形节点</param>
        private void CreateTreeView(int Belong,string sqlvalue, TreeNode treenode)
        {

            DataTable dt = new DataTable();
            string sqlstr = "select * from " + tablename + " where " + columFatherID + "=" + Belong.ToString()+" and "+columDescription+ "=" +sqlvalue;
            
            dt = mydbl.GetDataTable(sqlstr);
            //遍历结果集,添加节点。            
            foreach (DataRow dr in dt.Rows)
            {
                TreeNode tr = new TreeNode();
                tr.Tag = dr.ItemArray[0].ToString().Trim();
                tr.Text = dr.ItemArray[1].ToString().Trim();
                tr.ExpandAll();
                treenode.Nodes.Add(tr);
                //将该节点作为下级查询的父节点条件。
                int fatherid = int.Parse(dr.ItemArray[0].ToString().Trim());
                //递归调用。
                this.CreateTreeView(fatherid,sqlvalue, tr);
            }
        }       


        /// <summary>
        /// 从数据库中提取信息,绑定结构树控件。
        /// </summary>
        /// <param name="treeview">TreeView控件</param>
        /// <param name="trname">根节点名称</param>
        public void BindTreeView(TreeView treeview,string trname)
        {
            //清空所有节点。
            treeview.Nodes.Clear();
            //设根节点。
            TreeNode rootnode = new TreeNode();
            rootnode.Tag = 0;
            rootnode.Text = trname;
            rootnode.ExpandAll();
            treeview.Nodes.Add(rootnode);
            //调用递归过程。
            CreateTreeView(0, rootnode);
            treeview.ExpandAll();
        }

        /// <summary>
        /// 从数据库中提取信息,绑定结构树控件。
        /// </summary>
        /// <param name="treeview">TreeView控件</param>
        /// <param name="trname">根节点名称</param>
        /// <param name="SqlValue">查找条件</param>
        public void BindTreeView(TreeView treeview, string trname,string SqlValue)
        {
            //清空所有节点。
            treeview.Nodes.Clear();
            //设根节点。
            TreeNode rootnode = new TreeNode();
            rootnode.Tag = 0;
            rootnode.Text = trname;
            rootnode.ExpandAll();
            treeview.Nodes.Add(rootnode);
            //调用递归过程。
            CreateTreeView(0,SqlValue, rootnode);
            treeview.ExpandAll();
        }

        /// <summary>
        /// 循环查找要删除的节点及其子节点。
        /// </summary>
        /// <param name="DeleteID"></param>
        /// <param name="al"></param>
        private void DeleteTreeNodes(int DeleteID, ArrayList al)
        {
            DataTable dt = new DataTable();
            //查询父节点为DeleteID的项。
            string sqlstr = "select " + columID + " from " + tablename + " where " + columFatherID + "=" + DeleteID.ToString();
            dt = mydbl.GetDataTable(sqlstr);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                //获取每项ID。
                al.Add(int.Parse(dt.Rows[i].ItemArray[0].ToString()));
                //递归查询其子节点。
                this.DeleteTreeNodes(int.Parse(dt.Rows[0].ItemArray[0].ToString()), al);
            }
        }


        /// <summary>
        /// 添加节点信息到数据库中
        /// </summary>
        /// <param name="name">节点名称</param>
        /// <param name="father">父节点ID</param>
        public void nodeInsert(string name,int father)
        {
            string Insertstring = "Insert Into " + tablename + "(" + columName + "," + columFatherID + ")" + " values(@nodeName,@fatherID)";
            mydbl.Open();
            SqlCommand sqlc = new SqlCommand(Insertstring,mydbl.Connection);
            sqlc.Parameters.AddWithValue("@nodeName", name);
            sqlc.Parameters.AddWithValue("@fatherID", father);
            sqlc.ExecuteNonQuery();
            mydbl.Close();
        }


        public void nodeInsert(string name,string description, int father)
        {
            string Insertstring = "Insert Into " + tablename + "(" + columName + "," + columDescription + "," + columFatherID + ")" + " values(@nodeName,@description,@fatherID)";
            mydbl.Open();
            SqlCommand sqlc = new SqlCommand(Insertstring, mydbl.Connection);
            sqlc.Parameters.AddWithValue("@nodeName", name);
            sqlc.Parameters.AddWithValue("@description", description);
            sqlc.Parameters.AddWithValue("@fatherID", father);
            sqlc.ExecuteNonQuery();
            mydbl.Close();
        }
        
        /// <summary>
        /// 更新所选节点信息。
        /// </summary>
        /// <param name="id">所选节点ID</param>
        /// <param name="nodename">更新节点名称</param>
        public void nodeUpdate(int id,string nodename)
        { 
            string Updatestring="Update "+tablename+" Set "+columName+"=@nodename where "+columID+"=@id";
            mydbl.Open();
            SqlCommand sqlc = new SqlCommand(Updatestring,mydbl.Connection);
            sqlc.Parameters.AddWithValue("@id",id);
            sqlc.Parameters.AddWithValue("@nodename",nodename);            
            sqlc.ExecuteNonQuery();
            mydbl.Close();
        }


        public void nodeUpdate(int id, string nodename, string description)
        {
            string Updatestring = "Update " + tablename + " Set " + columName + "=@nodename," + columDescription + "=@description" + " where " + columID + "=@id";
            mydbl.Open();
            SqlCommand sqlc = new SqlCommand(Updatestring, mydbl.Connection);
            sqlc.Parameters.AddWithValue("@id", id);
            sqlc.Parameters.AddWithValue("@nodename", nodename);
            sqlc.Parameters.AddWithValue("@description", description);
            sqlc.ExecuteNonQuery();
            mydbl.Close();
        }

        /// <summary>
        /// 删除所选节点信息。
        /// </summary>
        /// <param name="id">所选节点ID</param>
        private void nodeDelete(int id)
        {
            string Deletestring = "Delete from "+tablename+" where "+columID+"=@id";
            mydbl.Open();
            SqlCommand sqlc = new SqlCommand(Deletestring,mydbl.Connection);
            sqlc.Parameters.AddWithValue("@id",id);
            sqlc.ExecuteNonQuery();
            mydbl.Close();
        }

        /// <summary>
        /// 删除所选节点信息。
        /// </summary>
        /// <param name="selectID">所选节点ID</param>
        public void Delete(int selectID)
        {
            ArrayList deleteid = new ArrayList();
            deleteid.Add(selectID);

            this.DeleteTreeNodes(selectID, deleteid);

            for (int i = 0; i < deleteid.Count; i++)
            {
                this.nodeDelete(int.Parse(deleteid[i].ToString()));
            }

            //string sql = "select * from "+ tablename+" where "+columFatherID+"="+selectID.ToString();
            //DataSet dataset = mydbl.GetDataSet(sql,0);
            //if (dataset.Tables[0].Rows.Count == 0)
            //{
            //    this.nodeDelete(selectID);
            //}
            //else
            //{
            //    MessageBox.Show(" 此节点下有子节点,不可删除该节点!请先删除子节点后再删除该节点。");
            //}       
        
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -