网上资料整理
新闻类别表:NewsClass 顶级类别固定为新闻
字段:ClassId int 4 编号 自增
ClassName nvarchar 50 类别名称:
PrentId int 4 父类id
LastNode int 4 标识是否有子类
首先做显示:
根据父类id 返回所有类别
存储过程为
1
CREATE
PROCEDURE
NewsClass_Tree_ID
2 @parentID int
3 AS
4 select * from NewsClass where parentId = @parentID
5 GO
6
2 @parentID int
3 AS
4 select * from NewsClass where parentId = @parentID
5 GO
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 }
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 }
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 }
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表示所有节点的集合
}