68行代码实现VFP treeview的增删查改,玩树玩得转,你还不怕不能上天

7dce9dfbd4472e93dfa0f78a3cde236f.gif

今天继续种树,先来一级树增删查改

新建框架表单,拉入框架控件,做成下面这个样子。

fc8075b8c2c67642385df644569c7828.png

控件设置同上一篇种树文。

打开祺佑代码生成器,生成一个DAL_TREEDATA1类。

ce62fd5e3c25fc1936be32aaab9f557a.png

保存到DAL文件夹。

表单的LOAD事件

DO setenv 


LOCAL oDBSQLHelper,nRow,oca


oca=NEWOBJECT("Dal_treedata1","Dal_treedata1.prg")
IF !oca.cursorfill(.t.)
  AERROR(laerror)
  Messagebox(laerror(2),0+16,Thisform.Caption)
  RETURN .f.
ENDIF 
thisform.Oca=oca

添加按钮事件

Local nFid
Select (Thisform.Oca.Alias)
Append Blank
Thisform.Opcode=1


Thisform.Refresh()
Thisform.txtmc.SetFocus()

编辑按钮事件

Thisform.Oca.edit()
Thisform.Opcode=2
thisform.Refresh()

删除按钮事件

yn=  Messagebox("你要删除当前记录吗?",4+32,thisform.Caption)
IF yn<>6
  RETURN 
ENDIF 
LOCAL lnid ,lctable
Select (Thisform.Oca.Alias)


lnid=id
lctable=Thisform.Oca.Alias
*--如果当前类别有子类别,无法删除
SELECT * FROM &lctable WHERE fid=lnid INTO ARRAY tmparry
IF _tally>0
    Messagebox("当前类别存在子类别,无法删除!",0+16,thisform.Caption)
  Return
ENDIF 




If !Thisform.Oca.Delete()
  Messagebox(Thisform.Oca.msg,0+16,thisform.Caption)
  Return
Endif


Select (Thisform.Oca.Alias)
If !Bof()
  Skip -1
Else
  If !Eof()
    Skip
  Endif
Endif


thisform.qiyu_treeview1.removenode(lnid)
thisform.Refresh()

保存按钮事件

Local lnId,lcText,lnFid
Select (Thisform.Oca.Alias)


If !Thisform.Oca.Save()  && 保存指针会变
  Messagebox(Thisform.Oca.msg,0+16,Thisform.Caption)
  Return
Endif


lcText=ALLTRIM(name)
lnId=id




IF thisform.Opcode==1
   Thisform.qiyu_treeview1.addnode(lnId,lcText)       
ELSE  
  Thisform.qiyu_treeview1.updatenode(lnId,lcText)   &&第三个参数为当前的父KEY,一般依据当前临时表的Fkey字段
ENDIF 


Thisform.Opcode=0
Thisform.Refresh()

撤消按钮事件

Thisform.oca.Undo()
Select (Thisform.Oca.Alias)
Thisform.Opcode=0
Thisform.Refresh()

无限级树的增删查改

1. 界面设计

多了一个按钮,一个叫同级添加,一个叫下级添加。 

bd944456f88069345ccb33da7325e576.png

2.照样生成DAL_treedata类

3 LOAD事件写法同上,注意类名的变化。

4 同级添加按钮事件

Local nFid
Select (Thisform.Oca.Alias)
nfid=fid
Append Blank
Replace  fid With nfid
Thisform.Opcode=1


Thisform.Refresh()
Thisform.txtmc.SetFocus()

5 下级添加按钮事件

Local nFid
Select (Thisform.Oca.Alias)
nfid=id
Append Blank
Replace fid With nfid
Thisform.Opcode=1


Thisform.Refresh()
Thisform.txtmc.SetFocus()

添加按钮,只是多了一个FID,父KEY的处理

6 编辑按钮事件同一级树

7 删除按钮事件

yn=  Messagebox("你要删除当前记录吗?",4+32,thisform.Caption)
IF yn<>6
  RETURN 
ENDIF 
LOCAL lnid ,lctable
Select (Thisform.Oca.Alias)


lnid=id
lctable=Thisform.Oca.Alias
*--如果当前类别有子类别,无法删除
SELECT * FROM &lctable WHERE fid=lnid INTO ARRAY tmparry
IF _tally>0
    Messagebox("当前类别存在子类别,无法删除!",0+16,thisform.Caption)
  Return
ENDIF 




If !Thisform.Oca.Delete()
  Messagebox(Thisform.Oca.msg,0+16,thisform.Caption)
  Return
Endif


Select (Thisform.Oca.Alias)
If !Bof()
  Skip -1
Else
  If !Eof()
    Skip
  Endif
Endif


thisform.qiyu_treeview1.removenode(lnid)
thisform.Refresh()

多判断一个有子树不让删除

8 保存按钮事件

Local lnId,lcText,lnFid
Select (Thisform.Oca.Alias)


If !Thisform.Oca.Save()  && 保存指针会变
  Messagebox(Thisform.Oca.msg,0+16,Thisform.Caption)
  Return
Endif


lcText=ALLTRIM(name)
lnId=id
lnFid=fid


IF thisform.Opcode==1
   Thisform.qiyu_treeview1.addnode(lnId,lcText,lnFid)       
ELSE  
  Thisform.qiyu_treeview1.updatenode(lnId,lcText,lnFid)   &&第三个参数为当前的父KEY,一般依据当前临时表的Fkey字段
ENDIF 


Thisform.Opcode=0
Thisform.Refresh()
thisform.qiyu_combobox2.RowSource=.null.
Select * From treedata  Into Cursor treedata2
thisform.qiyu_combobox2.RowSource="treedata2.name,id"

多了一个组合框的数据来源处理,FID的处理。

9 撤消按钮同一级树处理

这个代码就是这么少,快看看,代码是不是跟你平常想的不一样。框架不需要你去写任何的控件开闭,直接自响应浏览,新增,编辑,删除状态。

少写代码,快速上线。

猫猫的心里话

加菲猫的VFP|狐友会社群接收投稿啦

加菲猫的VFP,用VFP不局限VFP,用VFP混合一切。无论是VFP,还是JS,还是C,只要能混合起来,都可以发表。

商业模式,销售技巧、需求规划、产品设计的知识通通可以发表。

暂定千字50元红包,,优秀的文章红包更大,一经发表,红包到手。

如何帮助使用VFP的人?

用VFP的人,有专业的,有非专业了,很多人其实是小白,问出的问题是小白,如果问题不对,我们引导他们问正确的问题。无论如何请不要嘲笑他们说帮助都不看,这么简单的问题都不会,嘲笑别人不行,而无法提出建设性答案,是很low的。

我们无论工作需要,还是有自己的软件,都是是需要真正的知识,如何让更多人学习真正的VFP知识呢,只需要点赞,在看,能转发朋友圈就更好了。

加菲猫的vfp倡导用"VFP极简混合开发,少写代码、快速出活,用VFP,但不局限于VFP,各种语言混合开发"

我已经带领一百多名会员成功掌到VFP的黑科技,进入了移动互联网时代,接下来我们要进入物联网领域。

2023年狐友会社群会员继续招募中

社群会员获取的权益有:

祺佑三层开发框架商业版(猫框),终身免费升级,终身技术支持。

开放的录播课程有:

微信小程序,微信公众号开发,H5 APP开发,Extjs BS开发,VFP面向对象进阶,VFP中间层开发。

源码类资源有:

支付组件源码,短信源码,权限组件源码,一些完整系统的源码。这个可以单独出售的,需要的可以联系我。

会员也可以实现群内资源对接,可以接分包,合作等各项商业或技术业务

f0498b0f85a36e9b8e4955301d6359ed.gif

bf8b1dd8586e3537d439a344b3000598.jpeg

7f5111c387dd691daf47a53eb055ac8f.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值