数据如图所示 我想实现如下图效果
但是上面的图的三及菜单没在相应的二及菜单下`
应该怎么做?
但是上面的图的三及菜单没在相应的二及菜单下`
应该怎么做?
解决方案 »
- 大家都来说说吧
- 文本编辑器问题
- 在cs文件中用alert()返回页面后,页面上的CSS文字都变大了是怎么回事
- 急呀!select top 3 * from image where rtrim(ltrim(bj))='g' order by tjrq desc有什么错?
- 为什么数据库中是空格,输出显示时反而时 ??????????
- 请问扩展名是.aspx的文件,可以用记事本修改吗,为什么我修改后不能运行了呢.
- ===接口的不明白的地方===
- 关于显示的问题
- 请问有关TEXTBOX输入的问题,细则进内!在线等
- 用户登陆验证,给三次输入机会,超过三次就提示关闭窗口. 请问有这样的代码吗?
- 帮帮忙做个查询功能的小案例啊
- webservice能做到这种功能吗?
就解决这个问题,
private void Bind()
{ SqlConnection con = new SqlConnection("server=.;database=Office-DB;uid=sa;pwd=sa");
SqlCommand com = new SqlCommand("select * from OA_Purview", con);
SqlDataAdapter da = new SqlDataAdapter(com);
DataSet ds = new DataSet();
da.Fill(ds);
//调用创建方法创建TreeView的根节点
CreateTreeView(TreeView1.Nodes, ds, 0);
}
private void CreateTreeView(TreeNodeCollection nodes, DataSet ds, int pid)
{
//定义筛选条件
string sql = string.Format("ParentID={0}", pid); //从Dataset中筛选符合条件的行的集合
DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
//tnode.ImageUrl = "images/foldericon1.gif";
tnode.Text = dr["PurName"].ToString();
tnode.Value = dr["PurID"].ToString();
//设置显示的路径
tnode.NavigateUrl = dr["PurURL"].ToString();
//递归调用方法
CreateTreeView(tnode.ChildNodes, ds, Convert.ToInt32(dr["PurID"]));
//从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr); }
}
with simplerecursive ( ModeName, ModeId, ParentID ,sublevel)
as ( select ModeName ,
ModeId ,
ParentID,
0
from Mode
where ModeId = 100
union all
select p.ModeName ,
p.ModeId ,
p.ParentID,
sublevel + 1
from Mode p
inner join simplerecursive a on a.ModeId = p.ParentID
)
select sr.ModeId as id ,
sr.ModeName as [name] ,
sr.ParentID as pid,
sr.sublevel
from simplerecursive sr
inner join Mode et on sr.ParentID = et.ModeId
select * from dbo.Mode
这是我以前写的代码 但是就是不可以把3及的菜单 放在2及下 ``求帮助`
需用sql 来实现`
insert into @T(cid,pid,nm)
select 0,null,'上海'
union
select 1,0,'嘉定'
union
select 2,0,'长宁'
union
select 3,0,'黄浦'
union
select 4,0,'青浦'
union
select 5,0,'宝山'
union
select 6,0,'徐汇'
union
select 7,1,'安亭'
union
select 8,1,'黄渡'
union
select 9,1,'江桥'
union
select 10,5,'桃浦';with tb(cid,pid,nm,lv)
as
(
select cid,pid,cast(replicate('--',0)+nm as varchar) nm,lv=0 from @T where cid=0
union all
select a.cid,a.pid,cast(replicate('--',2*lv+2)+a.nm as varchar) nm,b.lv+1 lv from @T a,tb b where a.pid=b.cid
)
select * from tb结果
cid pic nm lv
0 NULL 上海 0
1 0 ----嘉定 1
2 0 ----长宁 1
3 0 ----黄浦 1
4 0 ----青浦 1
5 0 ----宝山 1
6 0 ----徐汇 1
10 5 --------桃浦 2
7 1 --------安亭 2
8 1 --------黄渡 2
9 1 --------江桥 2
(
model INT,
ModelName VARCHAR(50),
ParentId INT
)INSERT INTO t1 VALUES(100,'商品管理',0)
INSERT INTO t1 VALUES(101,'订单管理',0)
INSERT INTO t1 VALUES(107,'商品管理',100)
INSERT INTO t1 VALUES(108,'明细管理',100)SELECT m.model,m.parentid,m.modelName,CASE WHEN N.model IS NULL THEN '|-'+ m.modelname ELSE ' |-'+m.modelname END AS modelname,
CASE WHEN N.model IS NULL THEN m.model ELSE m.parentid END AS sort,
[LEVEL]=CASE WHEN N.Model IS NULL THEN 0 ELSE 1 END
FROM t1 AS m LEFT OUTER JOIN t1 AS n ON m.parentid=n.model
--测试数据
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
GO--广度搜索排序函数
CREATE FUNCTION f_Sort(@ID char(3)=NULL,@sort int=1)
RETURNS @t_Level TABLE(ID char(3),sort int)
AS
BEGIN
DECLARE tb CURSOR LOCAL
FOR
SELECT ID FROM tb
WHERE PID=@ID
OR(@ID IS NULL AND PID IS NULL)
OPEN TB
FETCH tb INTO @ID
WHILE @@FETCH_STATUS=0
BEGIN
INSERT @t_Level VALUES(@ID,@sort)
SET @sort=@sort+1
IF @@NESTLEVEL<32 --如果递归层数未超过32层(递归最大允许32层)
BEGIN
--递归查找当前节点的子节点
INSERT @t_Level SELECT * FROM f_Sort(@ID,@sort)
SET @sort=@sort+@@ROWCOUNT --排序号加上子节点个数
END
FETCH tb INTO @ID
END
RETURN
END
GO--显示结果
SELECT a.*
FROM tb a,f_Sort(DEFAULT,DEFAULT) b
WHERE a.ID=b.ID
ORDER BY b.sort
--结果
ID PID Name
------ --------- ----------
001 NULL 山东省
002 001 烟台市
004 002 招远市
003 001 青岛市
005 NULL 四会市
006 005 清远市
007 006 小分市
其实跟我另一个差不过
但是我把表名 和字段换了 查询的结果就不是我想要的了
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM sssss
WHERE PID = 0
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level, b.ID
FROM sssss a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
SELECT a.id,a.pid, SPACE(b.Level*6)+'|--'+a.Name,b.sort
FROM sssss a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort,a.id
with simplerecursive ( ModeName, ModeId, ParentID ,sublevel)
as ( select ModeName ,
ModeId ,
ParentID,
0
from Mode
where ModeId = 100
union all
select p.ModeName ,
p.ModeId ,
p.ParentID,
sublevel + 1
from Mode p
inner join simplerecursive a on a.ModeId = p.ParentID
)
select sr.ModeId as id ,
sr.ModeName as [name] ,
sr.ParentID as pid,
sr.sublevel
from simplerecursive sr
inner join Mode et on sr.ParentID = et.ModeId
可不可以在这个方法上面修改 ` 谢谢拉`
with simplerecursive ( employee_nm, employee_id, reportsto ,sublevel)
as ( select employee_nm ,
employee_id ,
reportsto,
0
from employee_tree
where employee_id = 2
union all
select p.employee_nm ,
p.employee_id ,
p.reportsto,
sublevel + 1
from employee_tree p
inner join simplerecursive a on a.employee_id = p.reportsto
)
select sr.employee_id as id ,
sr.employee_nm as empname ,
sr.reportsto as pid ,
sr.sublevel
from simplerecursive sr
inner join employee_tree et on sr.reportsto = et.employee_idcreate table employee_tree
(
employee_nm nvarchar(50) ,
employee_id int primary key ,
reportsto int
)insert into employee_tree
values ( 'richard', 1, null )
insert into employee_tree
values ( 'stephen', 2, 1 )
insert into employee_tree
values ( 'clemens', 3, 2 )
insert into employee_tree
values ( 'malek', 4, 2 )
insert into employee_tree
values ( 'goksin', 5, 4 )
insert into employee_tree
values ( 'kimberly', 6, 1 )
insert into employee_tree
values ( 'ramesh', 7, 5 )
insert into employee_tree
values ( 'aaaaa', 8, 2 )
为什么这个可以` 把它换成我的表就不可以了
我要根据一及菜单找二三及菜单 怎么做 ?
有谁知道吗`
最好是sql 语句
CREATE TABLE t1
(
model INT,
ModelName VARCHAR(50),
ParentId INT
)
INSERT INTO t1 VALUES(100,'商品管理',0)
INSERT INTO t1 VALUES(101,'订单管理',0)
INSERT INTO t1 VALUES(107,'商品管理',100)
INSERT INTO t1 VALUES(108,'明细管理',100)
INSERT INTO t1 VALUES(109,'明细管理',107)
alter function getDep(@model int )
returns varchar(200)
as
begin
declare @returns varchar(200)
Set @returns='┝'
declare @temp int
set @temp= (select ParentId from t1 where model=@model)
while(@temp<>0)
begin
set @returns=' '+@returns
set @temp=(select ParentId from t1 where model=@temp)
end
return @returns
endalter function getbb(@model int )
returns varchar(200)
as
begin
declare @returns varchar(200)
set @returns=@model
declare @temp varchar(200)
set @temp= (select ParentId from t1 where model=@model)
while(@temp<>0)
begin
set @returns=Convert(varchar(200),@temp)+Convert(varchar(200),@model)
set @model=@returns
set @temp=(select ParentId from t1 where model=@temp)
end
return @returns
end
select *,dbo.getDep(model)+ModelName from t1 order by dbo.getbb(model)
晕倒。十三号的贴!看来回答晚了嘛~~~
最近不怎么逛技术区哎!~
[/Quote][消息 208,级别 16,状态 6,过程 getbb,第 15 行
对象名 'getbb' 无效。
不行啊` 代码不可以执行
(
indexid int,
textvalue nvarchar(20),
parentid int
)--插入一些测试数据:insert into test values(1,'10',0)
insert into test values(2,'20',0)
insert into test values(3,'30',0)
insert into test values(4,'40',0)
insert into test values(5,'50',0)
insert into test values(10,'100',1)
insert into test values(11,'110',1)
insert into test values(12,'120',1)
insert into test values(100,'1000',10)
insert into test values(110,'1100',10)
insert into test values(120,'1200',10)
insert into test values(130,'1300',10)
insert into test values(1000,'10000',100)
insert into test values(1100,'11000',100)
insert into test values(1200,'12000',100)
insert into test values(1300,'13000',100)
insert into test values(20,'200',2)
insert into test values(21,'210',2)
insert into test values(22,'220',2)
insert into test values(200,'2000',20)
insert into test values(210,'2100',20)--执行测试Sql语句:GO
WITH DirectReports (indexid, textvalue,parentid,Level)
AS
(
SELECT e.indexid, e.textvalue,e.parentid, 0 AS Level
FROM test AS e where indexid=1 --起始节点
UNION ALL
SELECT e.indexid, e.textvalue,e.parentid,Level + 1
FROM test AS e
INNER JOIN DirectReports AS d
ON e.parentid = d.indexid
)
SELECT indexid, textvalue,parentid,Level FROM DirectReports
GO
我查询的是某一个模块下的二三级菜单 并有一定的规律
结果要如下
id name pid
1 aa 0
2 bb 1
3 cc 2
4 dd 1
5 ee 4
6 ff 5
13楼的代码是把所有的结果多例出来了 `
但我要的是某一模块下的 二三级菜单 谁可以修改下
我对游标不太懂
[消息 208,级别 16,状态 6,过程 getbb,第 15 行
对象名 'getbb' 无效。
不行啊` 代码不可以执行
[/Quote]
晕啊。是肯定可以的。我告诉你吧。先将这两个方法执行一下。create function getDep(@model int )
returns varchar(200)
as
begin
declare @returns varchar(200)
Set @returns='┝'
declare @temp int
set @temp= (select ParentId from t1 where model=@model)
while(@temp<>0)
begin
set @returns=' '+@returns
set @temp=(select ParentId from t1 where model=@temp)
end
return @returns
endcreate function getbb(@model int )
returns varchar(200)
as
begin
declare @returns varchar(200)
set @returns=@model
declare @temp varchar(200)
set @temp= (select ParentId from t1 where model=@model)
while(@temp<>0)
begin
set @returns=Convert(varchar(200),@temp)+Convert(varchar(200),@model)
set @model=@returns
set @temp=(select ParentId from t1 where model=@temp)
end
return @returns
end
注意将里面的表名换成你自己数据库的表名。
然后alter换成create
查询的时候select dbo.getDep(model)+ModelName from t1 order by dbo.getbb(model)
表名也换成你的。
我这边就是在05里测试的。
本质和别人的差不多。只不过你们写的是使用了05特有的递归办法。我这里写了两个方法做循环。
我还没学过哪个function 我还以为是JS里面的
(
model INT,
ModelName VARCHAR(50),
ParentId INT
)
INSERT INTO t1 VALUES(100,'商品管理',0)
INSERT INTO t1 VALUES(101,'订单管理',0)
INSERT INTO t1 VALUES(107,'商品管理',100)
INSERT INTO t1 VALUES(108,'明细管理',100)
INSERT INTO t1 VALUES(109,'分类1',107)
INSERT INTO t1 VALUES(110,'分类2',107)
INSERT INTO t1 VALUES(111,'明细1',108)
INSERT INTO t1 VALUES(112,'产品1',109)
-------------------------------------------------------------------
--上面单独执行create function getDep(@model int )
returns varchar(200)
as
begin
declare @returns varchar(200)
Set @returns='┝'
declare @temp int
set @temp= (select ParentId from t1 where model=@model)
while(@temp<>0)
begin
set @returns=' '+@returns
set @temp=(select ParentId from t1 where model=@temp)
end
return @returns
end
--上面单独执行create function getbb(@model varchar(200) )
returns varchar(200)
as
begin
declare @returns varchar(200)
set @returns=@model
declare @temp varchar(200)
set @temp= (select ParentId from t1 where model=@model)
while(@temp<>0)
begin
set @returns=Convert(varchar(200),@temp)+Convert(varchar(200),@model)
set @model=@returns
set @temp=(select ParentId from t1 where model=@temp)
end
return @returns
end--上面单独执行select *,dbo.getDep(model)+ModelName from t1 order by dbo.getbb(model)-----------------------------------------------------------------------------
drop table t1
drop function getDep
drop function getbb
--上面单独执行,删除测试
最后再给你将说明弄着,要是再不会用没办法了。
只是用到了循环!!!
这个方法只是为了实现你一楼要的那个无列名的输出
请问一下 只可以这样调用吗
select * from mode order by dbo.getbb(ModeId)
不可以
select * from mode order by dbo.getbb(100) 我不是把所有的结果都查出来的啊??
我只要ID为100子菜单下的子菜单啊`
这样就行了
go
create table [tb]([modeid] int,modename varchar(20),parentid int)
insert [tb]
select 100 ,'商品管理', 0 union all
select 101 ,'定单管理', 0 union all
select 102 ,'用户管理', 0 union all
select 104 ,'学院广告', 0 union all
select 105 ,'系统设置', 0 union all
select 106 ,'附件管理', 0 union all
select 107 ,'商品管理', 100 union all
select 108 ,'明细管理', 100 union all
select 109 ,'物流管理', 100 union all
select 110 ,'商品信息管理', 107 union all
select 111 ,'商品分类管理', 107 union all
select 112 ,'回收站管理', 107 union all
select 114 ,'团购管理', 108 union all
select 115 ,'拍卖管理', 108 union all
select 116 ,'优惠管理', 108 union all
select 117 ,'会员管理', 102 union all
select 118 ,'会员卡管理', 102 union all
select 119 ,'资金管理', 102 union all
select 120 ,'管理员管理', 102 union all
select 121 ,'添加管理员', 120 union all
select 122 ,'修改管理员', 120
go
--查所有子结点
if object_id('f_getC') is not null drop function f_getC
go
create function f_getC(@id int)
returns @re table(id int,level int,sort varchar(10))
as
begin
declare @l int
set @l=0
insert @re select @id,@l,null
while @@rowcount>0
begin
set @l=@l+1
insert @re select a.modeid,@l,ltrim(isnull(b.sort,a.modeid)) from tb as a,@re as b
where b.id=a.parentid and b.level=@l-1
end
update @re set level = level -1
return
end
go
select a.modeid,a.parentid,REPLICATE(' ',b.level) +'┝'+a.modename,b.level,b.sort from tb a,f_getC(0) b
where a.modeid=b.id
order by case when b.level<2 then 0 else 1 end,b.sort,b.level/*
modeid parentid sort level
----------- ----------- -------------------------------------------------- ---------- -----------
100 0 ┝商品管理 100 0
107 100 ┝商品管理 100 1
108 100 ┝明细管理 100 1
109 100 ┝物流管理 100 1
101 0 ┝定单管理 101 0
102 0 ┝用户管理 102 0
117 102 ┝会员管理 102 1
118 102 ┝会员卡管理 102 1
119 102 ┝资金管理 102 1
120 102 ┝管理员管理 102 1
104 0 ┝学院广告 104 0
105 0 ┝系统设置 105 0
106 0 ┝附件管理 106 0
110 107 ┝商品信息管理 100 2
111 107 ┝商品分类管理 100 2
112 107 ┝回收站管理 100 2
114 108 ┝团购管理 100 2
115 108 ┝拍卖管理 100 2
116 108 ┝优惠管理 100 2
121 120 ┝添加管理员 102 2
122 120 ┝修改管理员 102 2(所影响的行数为 21 行)*/