实现使用TreeView无级分类(一)绑定

网上资料整理
新闻类别表:NewsClass  顶级类别固定为新闻
字段:ClassId int 4  编号 自增
            ClassName nvarchar 50 类别名称:
            PrentId    int 4 父类id
           LastNode  int 4 标识是否有子类

首先做显示:
根据父类id 返回所有类别
存储过程为

1CREATE PROCEDURE NewsClass_Tree_ID
2@parentID int
3AS
4select * from NewsClass where parentId = @parentID
5GO
6

由于采用三层架构,这里提供DAL层代码
using System.Collections;
ArrayList可按照大小动态增加

 1 public ArrayList GetNewsListData(int parentID)
 2
 3        {
 4            ArrayList list = new ArrayList();
 5            SqlParameter[] sqlParmeter = {
 6                new SqlParameter("@parentID",SqlDbType.Int,4)
 7            }
;
 8            sqlParmeter[0].Value = parentID;
 9            SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction,CommandType.StoredProcedure,"NewsClass_Tree_ID",sqlParmeter);
10            while(reader.Read())
11            {
12                NewsClassData newsClassData = new NewsClassData();
13                newsClassData.ClassId = Convert.ToInt32(reader["ClassId"].ToString());
14                newsClassData.ClassName = reader["ClassName"].ToString();
15                newsClassData.ParentId = Convert.ToInt32(reader["ParentId"].ToString());
16                newsClassData.NumId = Convert.ToInt32(reader["NumId"].ToString());
17                newsClassData.LastNode = Convert.ToInt32(reader["LastNode"].ToString());
18                list.Add(newsClassData);
19            }

20            reader.Dispose();
21            return list;
22        }

BLL层写个方法调用DAL层

1 //根据parentID返回所有类别
2       public ArrayList GetNewsClassListData(int parentID)
3       {
4           return (new NewsClassAccessor()).GetNewsListData(parentID);
5       }

UI层 实现绑定 关键的

 1 protected void BindTree(TreeNodeCollection TreeCol,int superID)
 2    {
 3        ArrayList arryList = new ArrayList();//创建一个动态的数组
 4        NewsClassSystem newsClassSystem = new NewsClassSystem(); 实例化
 5        arryList = newsClassSystem.GetNewsClassListData(superID); 返回所有类别赋值给数组这里面包含所有类别,可对他实现查询
 6        TreeNode node;//实例化节点对象
 7        //这里我也不太明白
 8        foreach(NewsClassData newsClassData in arryList)
 9        {
10            node = new TreeNode();
11            node.Text = newsClassData.ClassName + "("+ newsClassData.NumId +")";
12            node.Value = newsClassData.ClassId.ToString();
13            TreeCol.Add(node);
14            BindTree(node.ChildNodes,Convert.ToInt32(node.Value));
15        }

16
17    }

在page_load里

if(!Page.IsPostBack)
        {
            this.treeClass.Nodes.Clear();
            BindTree(this.treeClass.Nodes,0);//0代表顶级类别 this.treeClass.Nodes表示所有节点的集合
        }

posted @ 2008-06-21 03:09  Mating_luo  阅读(510)  评论(0)    收藏  举报