您现在的位置: 爱迪森网络客服中心 >> 常见问题 >> 编程常见问题 >> ASP.NET技术 >> 文章正文
ASP.NET无限级分类的实现
作者:爱迪森网络    文章来源: 本站原创    更新时间:2008-6-13 16:57:06    点击数:

    做商业网站要用到多级分类,所以想到了无限级分类.如下:

数据表:

表名:Tb_Column 

表结构(所有字段非空): 

Column_ID     int 主键(注:非标识) 

Column_Name   nvarchar(50)分类名称 

Parent_ID     int 父分类ID(默认值0) 

Column_Path   nvarchar(1000) 分类路径 

Column_Depth  int分类深度(默认值0) 

Column_Order  int排序(默认值0) 

Column_Intro  nvarchar(1000)分类说明  

存储过程一:新建分类

 CREATE PROCEDURE sp_Column_Insert 

(  @Parent_ID int, 

@Column_Name nvarchar(50), 

@Column_Intro nvarchar(1000) 

AS Declare @Err As int Set @Err=0   Begin Tran  --通过现有记录获取栏目ID 

Declare @Column_ID As int Declare @Column_Depth As int Select @Column_ID = Max(Column_ID) From Tb_Column 

IF @Column_ID Is Not Null Set @Column_ID = @Column_ID+1 

Else Set @Column_ID = 1  --判断是否是顶级栏目,设置其Column_Path和Column_Order 

Declare @Column_Path As nvarchar(1000)  Declare @Column_Order As int

IF @Parent_ID = 0  Begin Set @Column_Path =Ltrim(Str(@Column_ID)) 

Select @Column_Order = Max(Column_Order) From Tb_Column 

IF @Column_Order Is Not Null Set @Column_Order = @Column_Order + 1  Else --如果没有查询到记录,说明这是第一条记录 

Set @Column_Order = 1   --深度 

 Set @Column_Depth = 1  End Else Begin --获取父节点的路径和深度 

Select @Column_Path = Column_Path ,@Column_Depth = Column_Depth From Tb_Column Where   

Column_ID=@Parent_ID  IF @Column_Path Is Null Begin Set @Err = 1  Goto theEnd  End  --获取同父节点下的最大序号

Select @Column_Order = Max(Column_Order) From Tb_PicColumn Where Column_Path like    ''+@Column_Path+'|%''Or Column_ID = @Parent_ID 

IF @Column_Order Is Not Null --如果序号存在,那么将该序号后的所有序号都加1  Begin   --更新当前要插入节点后所有节点的序号 

Update Tb_Column Set Column_Order = Column_Order +1 Where Column_Order    >@Column_Order  --同父节点下的最大序号加上1,构成自己的序号 

Set @Column_Order = @Column_Order + 1  End   Else Begin Set @Err=1  Goto theEnd  End  --父节点的路径加上自己的ID号,构成自己的路径 

Set @Column_Path = @Column_Path + '|' + Ltrim(Str(@Column_ID))   --深度 

Set @Column_Depth = @Column_Depth+1   End  Insert Into Tb_Column(Column_ID,Column_Name,Parent_ID,Column_Path,Column_Depth,Column_Order,Column_Intro)    Values(@Column_ID,@Column_Name,@Parent_ID,@Column_Path,@Column_Depth,@Column_Order,@Column_Intro)  

IF @@Error<>0   Begin Set @Err=1  Goto theEnd  End  --更新当前记录之后的记录的ORDER  --Update Tb_Column Set Column_Order = Column_Order+1 Where Column_Order  > @Column_Order 

本文地址:
 返回上一页   
  主题搜索 全文搜索          有问必答

热点问题
客服导航
如果您在使用我们的产品中遇到问题,建议您首先在“常见问题”中查询解决方法;  
如果没有找到该问题的解决方法和答案,您可以在“问题搜索”中进行搜索;  
如果搜索后没有找到满意答案,您可以登陆会员在“有问必答”,我们会在1个工作日内给您答复。  
有问必答
 
Copyright © 2003-2009 爱迪森网络 版权所有
本站所有虚拟主机域名与各类服务,适用于在线注册购买,立即开通。 冀ICP备08011707号