我最近在搞一个内部资料系统开发.用到Treeview,而且要需要无限分类,还要得到每个类包含的结果集!其实最重要的是比普通树表增加一列searchid,通过这列来进行查询!废话少讲,效果图如下:

其中要用到三个表:purtree,pur,purcom:设计图如下:purtree设计图

pur设计图:

purcom设计图:

表设计好之后就简单了.编写存储过程.触发器.还有视图:

我给purtree增加了一个触发器.用来增加searchid这列.这样我们就可以不用在程序中增加许多程序了,触发器代码:

CREATE TRIGGER searid_insert ON [dbo].[purtree]
FOR INSERT
AS
  declare @parentid char(10)
  declare @searchid char(50)
  set @parentid=(select parentid from purtree where treeid=(select @@identity))
  if @parentid=0
     begin
       set @searchid=(select '0'+ convert(char,max(searchid) +1,120) from purtree where parentid=0)
        update purtree set searchid=@searchid where treeid=(select @@identity)
     end
  else
      begin
         set @searchid=(select searchid from purtree where treeid=@parentid)
         update purtree set searchid=(RTRIM(CONVERT(char(50), @searchid, 120)) + LTRIM(CONVERT(char(50),(select @@identity),
         120)))
         where treeid=(select @@identity)
       end

这里注意.我的searchid=父节点的searchid+节点ID(也就是treeid),如果父节点是0,也就是根节点的话:searchid要判断.我这里是用01+1,也就是02.03这样!下面就是最重要的了.存储过程:

增加新树节点的存储过程:

CREATE PROCEDURE purtree_insert(@treename char(50),@parentid int)
as
insert into purtree(treename,parentid)values(@treename,@parentid)
exec purtree_update_searchid
GO

这里还用到了purtree_update_searchid这个存储过程.我们也把贴出来:

CREATE PROCEDURE purtree_update_searchid
as
declare @treeid int
set @treeid=(select @@identity)
update pur set searchid=(select searchid from purtree where treeid=@treeid)
where mname=(select treename from purtree where treeid=@treeid) and
          searchid=(select searchid from purtree where treeid=(select parentid from purtree where treeid=@treeid))
GO
这个存储过程主要利用了插入记录的时候.SQL会产生一个@@identity的标识!如果 pur表中存在添加的节点:如:网站,这时候就需要更新他的searchid,要不然,我的树节点下面就没有这一项!

下面是pur表中插入记录,最需要注意的就是.插入记录的:如我的效果图中,物料名称在树中有相应的节点的话,这时候searchid就要更新,存储过程如下:

CREATE PROCEDURE pur_insert
(
@reid char(50),@cname char(50),@ename char(50),@ctype char(50),@address char(200),@web char(50),
@mtype char(50),@mname char(50),@createdate datetime,@createuser char(50),@other char(200),
@searchid char(50),@csearchid char(50)
)
as
declare @comsearchid char(50)
set @comsearchid=(select searchid from purtree where treeid=@csearchid)
insert into pur(cname,mtype,mname,createdate,createuser,other,searchid)
         values(@cname,@mtype,@mname,@createdate,@createuser,@other,@searchid)
exec pur_update_searchid @searchid
insert into purcom(reid,cname,ename,type,address,web,searchid)
         values(@reid,@cname,@ename,@ctype,@address,@web,@comsearchid)
GO
这里又用到了pur_update_searchid @searchid这个存储过程:

CREATE PROCEDURE pur_update_searchid(@searchid char(50))
as
declare @id int
set @id=(select @@identity)
declare @newsearchid char(50)
set @newsearchid=(select searchid from purtree where treename=(select mname from pur where [id]=@id)
         and rtrim(searchid) like '%'+rtrim(@searchid)+'%'
         )
if @newsearchid is not null
  begin
  update pur set searchid=@newsearchid
  where [id]=@id
end
GO

需要注意一点.就是要判断为null值的时候才更新.不然他就会更新所有,到时候pur表中相应行没了searchid,那就没得玩了!

还有最后一步.就是更新pur表,存储过程:

CREATE PROCEDURE pur_update
(
@reid char(50),@cname char(50),@ename char(50),@ctype char(50),@address char(200),@web char(50),
@mtype char(50),@mname char(50),@modifydate datetime,@modifyuser char(50),@other char(200),
@searchid char(50),@csearchid char(50),@pid int
)
as
declare @cid int
set @cid=(select cid from purview where [id]=@pid)
declare @comsearchid char(50)
set @comsearchid=(select searchid from purtree where treeid=@csearchid)
update pur set cname=@cname,mname=@mname,mtype=@mtype,modifyuser=@modifyuser,
           modifydate=@modifydate,other=@other,searchid=@searchid
     where [id]=@pid

exec  pur_update_searchid_id @pid,@searchid

update purcom set reid=@reid,cname=@cname,ename=@ename,address=@address,web=@web,
            searchid=@comsearchid,type=@ctype
    where [id]=@cid
GO

用到 pur_update_searchid_id @pid,@searchid 存储过程:

CREATE PROCEDURE pur_update_searchid_id(@pid int,@searchid char(50))
as
declare @newsearchid char(50)
set @newsearchid=(select searchid from purtree where treename=(select mname from pur where [id]=@pid)
         and rtrim(searchid) like '%'+rtrim(@searchid)+'%'
         )
if @newsearchid is not null
  begin
  update pur set searchid=@newsearchid
  where [id]=@pid
end
GO

效果跟插入差不多.只不过update不产生@@identity我才重新写了一个!

最后就是我效果图上.树节点后面还有(N家)这个统计.就是统计pur表中的searchid.因为是唯一的.所以很好统计,我是写了一个自定义函数:

CREATE FUNCTION get_pur_count(@searchid as char(50)) 
RETURNS int
 AS 
BEGIN
declare @count as int
set @count=(select count(*) from purview
where searchid like rtrim((select searchid from purtree where treeid=@searchid))+'%')
return @count
END

加上绑定树上面就行了!Treeview绑定数据库我再单独写点东西!其实就是一个总结,没什么技术!!大家一起学习吧!

无限分类树--Treeview相关推荐

  1. Php xml 目录,PHP-PHP+xml的无限分类树目录的方法?

    无限分类树的代码有很多,下面是个示例: /** by lenush; */ class Tree { var $data = array(); var $child = array(-1=>ar ...

  2. android无限级树形控件,无限分类树,无限层级树

    更新记录 3.1(2020-09-09) 修复小程序样式bug 3.0(2020-04-10) 增加保存折叠路径数组,可以还原折叠状态 全部折叠,全部打开 查看更多 当前功能有 多选,单选,不选.末级 ...

  3. mysql查询无限下级_示例php+mysql查询实现无限下级分类树输出

    本文实例讲述了php+mysql查询实现无限下级分类树输出.分享给大家供大家参考,具体如下: 这里介绍的php结合mysql查询无限下级树输出,其实就是无限分类.给各位整理了几个php无限分类的例子. ...

  4. php根据分类生成网址,PHP实现无限极分类生成分类树的方法

    本文实例讲述了PHP实现无限极分类生成分类树的方法.分享给大家供大家参考,具体如下: 现在的分类数据库设计基本都是:每一个分类有一个id主键字段,一个pid指向父类的id,这样便可实现无限级分类,取出 ...

  5. 无限极分类php简单,创建无限极分类树型结构的简单方法

    先上效果图 顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类. 接下来看具体实现的代码: 一.在控制器中按字段查询,查询出所有分类 ...

  6. php查询下级分类,php+mysql查询实现无限下级分类树输出示例

    本文实例讲述了php+mysql查询实现无限下级分类树输出.分享给大家供大家参考,具体如下: 这里介绍的php结合mysql查询无限下级树输出,其实就是无限分类.给各位整理了几个php无限分类的例子. ...

  7. php 实现无限极分类树 (引用和递归)

    这里首先介绍一下,什么是无限极分类? 无限极分类简单点说就是一个类可以分成多个子类,然后一个子类又可以分另外多个子类这样无限分下去,就好象windows可以新建一个文件夹,然后在这个文件夹里又可以建一 ...

  8. php无限分类原理,php 递归无限级分类原理和实现代码

    递归无限级分类的原理: 每一个分类都记录它的父级id,当为顶级分类时,父级id为0.这样无论哪个分类,都可以通过父级id一层一层去查明它的所有父级,以便清楚知道它所属何种分类,层级深度为几. 对数据进 ...

  9. 深度实现session【包括session入库、session机制和session和cookie的使用方法,完善会话机制(在分布式机器中也能使用)】、无限分类的实现...

    1.session的注意点: @session_start();//这个配置需要注意,session开启中会有影响,所以使用错误抑制符进行限制[并且使用php.ini对session进行自动开启] s ...

最新文章

  1. java.lang.Class
  2. WMS Schema
  3. 乌龟的故事,很精彩滴哟
  4. 按字寻址与按字节寻址
  5. 线性共轭梯度法python_python实现的共轭梯度法
  6. 关于用户空间和内核空间
  7. 以太网应用于控制时存在的问题
  8. 51Nod - 1381 硬币游戏
  9. python 支付宝支付 无效根证书_Python-支付宝SDK的使用与注意事项,pythonalipaysdk,及,点...
  10. 【NOIP2003】【Luogu1044】栈
  11. 【 CPLEX安装】
  12. 黑群晖vmm专业版_教你群晖用自带的VMM虚拟机安装精简版win10系统教程
  13. 逆向分析商业软件 010 Editor 及注册机编写
  14. 计算机tcpip协议主要功能,tcp协议的主要功能
  15. 腾讯云短信服务(SMS)申请流程
  16. 食疗肠易激综合征 心脏神经官能症
  17. ARM® Cortex®-M内核单片机STM32家族介绍,覆盖STM32F、STM32H、STM32L全系列
  18. AWVS14.1安装
  19. 如何让你的阿里博客排在百度的首页
  20. android 动态库获取路径问题,一种Android App在Native层动态加载so库的方案

热门文章

  1. 【蓝桥杯JavaB组真题详解】武功秘籍(2014)
  2. 三坐标测圆的直径怎么测_RationalDMIS 7.1 如何准确测量圆/圆弧直径
  3. VRP-华为设备操作系统
  4. Android中软键盘弹出可能遮挡布局
  5. scr 计算机教育,鲁教版小学信息技术 第四册 第1课 Scraino初体验 教案
  6. MSP430 单片机 HX711重量传感器接线 程序读取
  7. 让你不再疑惑怎么转换音频格式
  8. 李泽湘教授给未来创业者的一封信
  9. 01 | n2n虚拟局域网
  10. 八个工作好习惯,值得学习!