实现使用TreeView无级分类(一)绑定
网上资料整理
新闻类别表: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
CREATE PROCEDURE NewsClass_Tree_ID2
@parentID int3
AS4
select * from NewsClass where parentId = @parentID5
GO6

由于采用三层架构,这里提供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
}
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
}
//根据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
}
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表示所有节点的集合
}


SqlParameter[] sqlParmeter
浙公网安备 33010602011771号