📄 treeclass.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 + -