今年上班后,好久没有到这边了.今天就把我得工作内容无限级树储取例子和大家分享,欢迎各位点评:
代码下载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 私有操作      }