无限级分类查找节点的所有子级和父级 (转载)
2009-12-09 16:46
429 查看
一直要实现这个功能,现在看到有人弄出来了转过来先看看。
无限级分类数据表:
SQL代码:
create table t_power(
id int not null IDENTITY(1,1) PRIMARY KEY, --权限ID
ParentId int not null default(0), --父级ID
Depath int not null default(0), --级数
[Name] varchar(100) default('') not null, --名称
IsMenu int not null default(0), ---是否为菜单项
)
go
查找节点的所有子级:
C#代码:
///
/// 获取子级 返回子级
///
/// 父级id
///子级列表
public static void GetChild(int parentId,ref IList powerlist )
{
string strsql = "select * from t_power where ParentId=" + parentId.ToString();
using (SqlDataReader dr = sql.ExecuteReader(strsql))
{
if (!dr.HasRows)
return;
while (dr.Read())
{
PInfop = new PInfo();
p.Id = Convert.ToInt32(dr["id"]); ;
p.ParentId = Convert.ToInt32(dr["ParentId"]);
p.Depath = Convert.ToInt32(dr["Depath"]);
p.Name = dr["Name"].ToString();
p.IsMenu = Convert.ToInt32(dr["IsMenu"]);
powerlist.Add(p);
GetChild(Convert.ToInt32(dr["id"]), ref powerlist);
}
}
}查找所有父级:
C#代码:
///
/// 获取所有祖先
///
/// 当前ID
/// 列表
public static IList GetParentPower(int powerid) {
IList powerList = new List();
string strsql = @"
declare @tempTable TABLE
(
[id] int,
ParentId int,
Depath int,
[Name] varchar(100),
IsMenu int,
Url varchar(200)
)
declare @oldId int
declare @ID int
set @ID={0}
set @oldId=@ID
while(@ID>0)
begin
select @ID=ParentId from t_power where ID=@ID;
if @oldId=@ID
break
if(@ID>0)
begin
insert into @tempTable select * from t_power where ID=@ID;
end
end
select * from @tempTable order by id asc
";
strsql = string.Format(strsql, powerid);
using (SqlDataReader dr = sql.ExecuteReader(strsql))
{
while (dr.Read())
{
PowerInfo p = new PowerInfo();
p.Id = Convert.ToInt32(dr["id"]); ;
p.ParentId = Convert.ToInt32(dr["ParentId"]);
p.Depath = Convert.ToInt32(dr["Depath"]);
p.Name = dr["Name"].ToString();
p.IsMenu = Convert.ToInt32(dr["IsMenu"]);
powerList.Add(p);
}
}
return powerList;
}
无限级分类数据表:
SQL代码:
create table t_power(
id int not null IDENTITY(1,1) PRIMARY KEY, --权限ID
ParentId int not null default(0), --父级ID
Depath int not null default(0), --级数
[Name] varchar(100) default('') not null, --名称
IsMenu int not null default(0), ---是否为菜单项
)
go
查找节点的所有子级:
C#代码:
///
/// 获取子级 返回子级
///
/// 父级id
///子级列表
public static void GetChild(int parentId,ref IList powerlist )
{
string strsql = "select * from t_power where ParentId=" + parentId.ToString();
using (SqlDataReader dr = sql.ExecuteReader(strsql))
{
if (!dr.HasRows)
return;
while (dr.Read())
{
PInfop = new PInfo();
p.Id = Convert.ToInt32(dr["id"]); ;
p.ParentId = Convert.ToInt32(dr["ParentId"]);
p.Depath = Convert.ToInt32(dr["Depath"]);
p.Name = dr["Name"].ToString();
p.IsMenu = Convert.ToInt32(dr["IsMenu"]);
powerlist.Add(p);
GetChild(Convert.ToInt32(dr["id"]), ref powerlist);
}
}
}查找所有父级:
C#代码:
///
/// 获取所有祖先
///
/// 当前ID
/// 列表
public static IList GetParentPower(int powerid) {
IList powerList = new List();
string strsql = @"
declare @tempTable TABLE
(
[id] int,
ParentId int,
Depath int,
[Name] varchar(100),
IsMenu int,
Url varchar(200)
)
declare @oldId int
declare @ID int
set @ID={0}
set @oldId=@ID
while(@ID>0)
begin
select @ID=ParentId from t_power where ID=@ID;
if @oldId=@ID
break
if(@ID>0)
begin
insert into @tempTable select * from t_power where ID=@ID;
end
end
select * from @tempTable order by id asc
";
strsql = string.Format(strsql, powerid);
using (SqlDataReader dr = sql.ExecuteReader(strsql))
{
while (dr.Read())
{
PowerInfo p = new PowerInfo();
p.Id = Convert.ToInt32(dr["id"]); ;
p.ParentId = Convert.ToInt32(dr["ParentId"]);
p.Depath = Convert.ToInt32(dr["Depath"]);
p.Name = dr["Name"].ToString();
p.IsMenu = Convert.ToInt32(dr["IsMenu"]);
powerList.Add(p);
}
}
return powerList;
}
相关文章推荐
- 无限级分类查找节点的所有子级和父级
- 根据父级编号获取无限树结构数据表中所有子节点的数据
- Thinkphp的list_to_tree 实现无限级分类列出所有节点
- 无限极分类查找所有子孙节点的改进算法
- Thinkphp的list_to_tree 实现无限级分类列出所有节点
- 无限极分类mysql存储过程编写实现调用时给定一个id,返回其所有父级与子级并排序
- 以迭代(非递归)方式获取无限分类中所有的最后一层子节点数据
- MSSQL 下递归CTE的应用通过父级获取所有对应的子级节点(一)
- JS获取节点的兄弟,父级,子级元素
- mysql中从子类ID查询所有父类(做无限分类经常用到)
- 无限级分类查找--子孙树,家谱树
- oracle 查找所有下级分类sql语句
- PHP删除无限分类并同时删除它下面的所有子分类的方法
- 根据一级分类查询所有子级分类
- SQL递归函数列出父级的所有子级(ID ParentID模式)
- <转载>如何解决子级用float浮动父级div高度不能自适应的问题
- MSSQL 递归CTE的应用通过子级获取所有对应的父级及其本身(二)
- <转载>如何解决子级用float浮动父级div高度不能自适应的问题
- JS获取节点的兄弟,父级,子级元素的方法
- JS获取节点的兄弟,父级,子级元素的方法(js获取子级获取到换行与空格元素-FF)