今年上班后,好久没有到这边了.今天就把我得工作内容无限级树储取例子和大家分享,欢迎各位点评:
代码下载http://www.my0591.net/codes/ControlTree.rar
数据库表设计(sql server 2000):
字段名 数据类型 是否主键 默认值 说明
CID Int(4) 自增 预案栏目ID
IID Int 预案ID
CName Varchar(50) 预案栏目名称
UP_ID Int 上一级栏目ID
bLow Bit 是否存在下一级
CSort Int 栏目排序
bCurrent Bit 是否为当前阶段树操作访问类(TreeController.cs):namespace ControlTree
{
/// <summary>
/// 树操作类
/// </summary>
public class TreeController
{
#region 私有属性
#endregion
#region 公开接口
public TreeController(TreeView aTreeView,string ConnStr)
{
m_Tree = aTreeView;
m_Tree.HideSelection = false;
m_ConnStr = ConnStr;
m_DbConnect = SqlClientDBConnect.GetConn(m_ConnStr);
} /// <summary>
/// 载入树节点
/// </summary>
public void Load(int parentID)
{
generateNodes(parentID, null);//递归生成树
} /// <summary>
/// 保存树节点,重新编排CSort
/// </summary>
public void Save()
{
saveNodes(this.m_Tree.Nodes);
} /// <summary>
/// 添加一个节点
/// </summary>
/// <param name="parentNode"></param>
/// <param name="newNodeEntity"></param>
public TreeNode AddANode(TreeNode parentNode,NodeEntity newNodeEntity,bool isInsert)
{
if (isInsert)
{
AddANodeEntity(newNodeEntity);
}
TreeNode newNode = new TreeNode(newNodeEntity.CName);
newNode.Tag = newNodeEntity;
if (parentNode != null)
{
parentNode.Nodes.Add(newNode);
}
else//空的时候添加在控件最外层
{
this.m_Tree.Nodes.Add(newNode);
}
return newNode;
} /// <summary>
/// 修改一个节点
/// </summary>
/// <param name="theNode"></param>
/// <param name="newNodeEntity"></param>
public bool EditANode(TreeNode theNode, NodeEntity newNodeEntity)
{
theNode.Text = newNodeEntity.CName;
theNode.Tag = newNodeEntity; return UpdateANodeEntity(newNodeEntity);
} /// <summary>
/// 删除一个节点
/// </summary>
/// <param name="theNode"></param>
public bool DelANode(TreeNode theNode)
{
if (theNode.Nodes.Count > 0)
{
return false;
}
NodeEntity aNodeEntity = GetNodeEntity(theNode);
if (aNodeEntity != null)
{
theNode.Parent.Nodes.Remove(theNode);
return DelANodeEntity(aNodeEntity);
}
else
{
return false;
} } /// <summary>
/// 获取与theNode关联得NodeEntity
/// </summary>
/// <param name="theNode"></param>
/// <returns></returns>
public NodeEntity GetNodeEntity(TreeNode theNode)
{
return (theNode.Tag as NodeEntity);
} public NodeEntity GetANewNodeEntity()
{
NodeEntity aNodeEntity = new NodeEntity();
aNodeEntity.CID = 0;
aNodeEntity.IID = 1; aNodeEntity.CName = "新栏目";
aNodeEntity.UP_ID = 0; aNodeEntity.bLow = false;
aNodeEntity.CSort = 0; aNodeEntity.bCurrent = false; return aNodeEntity;
} #endregion #region 私有操作 }
代码下载http://www.my0591.net/codes/ControlTree.rar
数据库表设计(sql server 2000):
字段名 数据类型 是否主键 默认值 说明
CID Int(4) 自增 预案栏目ID
IID Int 预案ID
CName Varchar(50) 预案栏目名称
UP_ID Int 上一级栏目ID
bLow Bit 是否存在下一级
CSort Int 栏目排序
bCurrent Bit 是否为当前阶段树操作访问类(TreeController.cs):namespace ControlTree
{
/// <summary>
/// 树操作类
/// </summary>
public class TreeController
{
#region 私有属性
#endregion
#region 公开接口
public TreeController(TreeView aTreeView,string ConnStr)
{
m_Tree = aTreeView;
m_Tree.HideSelection = false;
m_ConnStr = ConnStr;
m_DbConnect = SqlClientDBConnect.GetConn(m_ConnStr);
} /// <summary>
/// 载入树节点
/// </summary>
public void Load(int parentID)
{
generateNodes(parentID, null);//递归生成树
} /// <summary>
/// 保存树节点,重新编排CSort
/// </summary>
public void Save()
{
saveNodes(this.m_Tree.Nodes);
} /// <summary>
/// 添加一个节点
/// </summary>
/// <param name="parentNode"></param>
/// <param name="newNodeEntity"></param>
public TreeNode AddANode(TreeNode parentNode,NodeEntity newNodeEntity,bool isInsert)
{
if (isInsert)
{
AddANodeEntity(newNodeEntity);
}
TreeNode newNode = new TreeNode(newNodeEntity.CName);
newNode.Tag = newNodeEntity;
if (parentNode != null)
{
parentNode.Nodes.Add(newNode);
}
else//空的时候添加在控件最外层
{
this.m_Tree.Nodes.Add(newNode);
}
return newNode;
} /// <summary>
/// 修改一个节点
/// </summary>
/// <param name="theNode"></param>
/// <param name="newNodeEntity"></param>
public bool EditANode(TreeNode theNode, NodeEntity newNodeEntity)
{
theNode.Text = newNodeEntity.CName;
theNode.Tag = newNodeEntity; return UpdateANodeEntity(newNodeEntity);
} /// <summary>
/// 删除一个节点
/// </summary>
/// <param name="theNode"></param>
public bool DelANode(TreeNode theNode)
{
if (theNode.Nodes.Count > 0)
{
return false;
}
NodeEntity aNodeEntity = GetNodeEntity(theNode);
if (aNodeEntity != null)
{
theNode.Parent.Nodes.Remove(theNode);
return DelANodeEntity(aNodeEntity);
}
else
{
return false;
} } /// <summary>
/// 获取与theNode关联得NodeEntity
/// </summary>
/// <param name="theNode"></param>
/// <returns></returns>
public NodeEntity GetNodeEntity(TreeNode theNode)
{
return (theNode.Tag as NodeEntity);
} public NodeEntity GetANewNodeEntity()
{
NodeEntity aNodeEntity = new NodeEntity();
aNodeEntity.CID = 0;
aNodeEntity.IID = 1; aNodeEntity.CName = "新栏目";
aNodeEntity.UP_ID = 0; aNodeEntity.bLow = false;
aNodeEntity.CSort = 0; aNodeEntity.bCurrent = false; return aNodeEntity;
} #endregion #region 私有操作 }
generateNodes
递归生成树没在上面写出来