今天继续种树,先来一级树增删查改
新建框架表单,拉入框架控件,做成下面这个样子。
控件设置同上一篇种树文。
打开祺佑代码生成器,生成一个DAL_TREEDATA1类。
保存到DAL文件夹。
表单的LOAD事件
代码语言:javascript复制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
添加按钮事件
代码语言:javascript复制Local nFid
Select (Thisform.Oca.Alias)
Append Blank
Thisform.Opcode=1
Thisform.Refresh()
Thisform.txtmc.SetFocus()
编辑按钮事件
代码语言:javascript复制Thisform.Oca.edit()
Thisform.Opcode=2
thisform.Refresh()
删除按钮事件
代码语言:javascript复制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()
保存按钮事件
代码语言:javascript复制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()
撤消按钮事件
代码语言:javascript复制Thisform.oca.Undo()
Select (Thisform.Oca.Alias)
Thisform.Opcode=0
Thisform.Refresh()
无限级树的增删查改
1. 界面设计
多了一个按钮,一个叫同级添加,一个叫下级添加。
2.照样生成DAL_treedata类
3 LOAD事件写法同上,注意类名的变化。
4 同级添加按钮事件
代码语言:javascript复制Local nFid
Select (Thisform.Oca.Alias)
nfid=fid
Append Blank
Replace fid With nfid
Thisform.Opcode=1
Thisform.Refresh()
Thisform.txtmc.SetFocus()
5 下级添加按钮事件
代码语言:javascript复制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 删除按钮事件
代码语言:javascript复制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 保存按钮事件
代码语言:javascript复制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的黑科技,进入了移动互联网时代,接下来我们要进入物联网领域。