子数据窗口的问题?

cdqy 2003-09-05 02:57:49
功能:
当插入某行时,在子数据窗口上写上要插入行的内容,如果子数据窗口有这样的内容,则自动滚动到那行上。如果没有,按回车在子数据窗口表中插入一条记录。

问题:
1、当输入内容时,如何搜索子数据窗口中的记录,并自动滚动到那行上。
...全文
71 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
mittee 2003-10-25
  • 打赏
  • 举报
回复
用窗体之间传递参数就可以
在维护窗口的CLOSE()事件里写:
if isvalid(w_cx) then
w_cx.dw_1.object.mc[X] = ?????????
end if
yao555 2003-10-25
  • 打赏
  • 举报
回复
用openwithparm和closewithparm、messagewithparm将数据提出来,再把数据库更新,之后刷新子数据窗口,把新输入的数据自动添冲。
cdqy 2003-10-24
  • 打赏
  • 举报
回复
我也是这样写的,不过你一旦输入表中没有的数据,就报错了根本不会执行到下面的插入语句!

yao555你的想法虽然正确,但我希望能直接在子数据窗口中就插入新数据,可以在要插入的时,弹出一个提示窗口。要求用户确认就是!
cdqy 2003-09-23
  • 打赏
  • 举报
回复
这个我知道,但是我想在输入数据后。如果在该表中没有,则插入该条记录。

yao555 2003-09-23
  • 打赏
  • 举报
回复
你这种设计思路有问题,如果用户误操作将导致没用的数据添进数据字典,应该在数据字典检索不到数据时用快捷键如alt+z弹出数据字典维护窗口,维护完数据字典后用 DataWindowChild dwc
dw_1.GetChild('hwbm', dwc)//hwbm为数据窗口的含子dw的字段
dwc.settransobject(sqlca)
dwc.retrieve()
liujiaqiang 2003-09-23
  • 打赏
  • 举报
回复
这样试试好吗?

假如你的datawindow 为 dw_1 , 其中有(a , b ,c ,d)四列。 在窗口 w_1中。
其中 b列有子datawindow ,假如为 ddd_b ,其中它有显示列 cdisplay(字符型
数据列 cdata(字符型), 起对应的表为 t_child。
在dw_1的itmechanged事件中写以下代码:

datawindowchilde dwc_1
integer li_return
long ll_rowcount
string ls_filter

if dwo.name = 'b' then
li_return = dw_1.getchild("b" , dwc_1) //得到子datawindow
if li_return <> 1 then
messagebox("提示", "无法得到子datawindow!")
return
end if

ls_filter = " ( cdisplay like '%" + trim(data) + "%' ) or ( cdata like '%" + trim(data) + "%')"
dwc_1.settransobject(sqlca)
dwc_1.retrieve()
dwc_1.setfilter(ls_filter)
dwc_1.filter()
ll_rowcount = dwc_1.rowcount() //得到检索的行
if ll_rowcount > 0 then
dwc_1.ScrollToRow(ll_rowcount) //跳到满足条件的行的最后一行
else
insert t_child (cdata , cdisplay) values ('主键值' , :data) ;
if sqlca.sqlcode = 0 then
commit ;
messagebox("提示”,“保存成功!”)
else
rollback ;
messagebox("提示”,“保存失败!”)
end if
end if
end if

这样写可能有点迟钝,需要焦点移到其它列上才会触发此事件。这也是一个问题。而且效率不是很好。
你看看吧,
祝你成功!!!!


ufan 2003-09-11
  • 打赏
  • 举报
回复
用GETCHILD()得子数据窗口后,你完全可以像操作数据窗口一样操作它!
cdqy 2003-09-10
  • 打赏
  • 举报
回复
up
cdqy 2003-09-09
  • 打赏
  • 举报
回复
虽然得到了子数据窗口,如果写的信息,在子数据窗口中找不到,就报错了。根本无法执行到插入代码的地方。
cdqy 2003-09-08
  • 打赏
  • 举报
回复
在 itemerror事件中 return 1
就返回了,无法执行itemchanged事件中的代码。
hongweicn 2003-09-05
  • 打赏
  • 举报
回复
可以用getchild()得到子数据窗口,这样就可以象一般的数据窗口来操作它,可以插入等
jdsnhan 2003-09-05
  • 打赏
  • 举报
回复
不是数据库的检测,而是dw的检测!
dw检测在 itemerror事件中 return 1
如果是数据库检测,如违反唯一性约束条件,则在dberror事件中写脚本。
cdqy 2003-09-05
  • 打赏
  • 举报
回复
如果输入的内容无法在子数据窗口中找到,就报错。说该内容无法通过列的测试。
根本就无法执行插入新记录的代码上。

如何消除数据库的检查!
jdsnhan 2003-09-05
  • 打赏
  • 举报
回复
重新选择了会触发itemchange事件!
cdqy 2003-09-05
  • 打赏
  • 举报
回复
子数据窗口中有1,2,3,4四条数据。本来是2,后来我改为3。这时如果我关闭整个窗口,却不报数据被更新的提示。我在数据窗口的editchanged事件中写了代码,但子数据窗口的数据被重新选择却不触发这个事件。
workhand 2003-09-05
  • 打赏
  • 举报
回复
什么叫重新选择了?
cdqy 2003-09-05
  • 打赏
  • 举报
回复
还有怎么判断子数据窗口中的数据被重新选择了。
workhand 2003-09-05
  • 打赏
  • 举报
回复
问题描述不清楚,到底几个dw?
初步理解如下:
Ls_01 = getitemstring(dw_1.getrow(),'comlumn')
Ll_find = dw_1.find('comlumn = "' + Ls_01 + '"')
IF Ll_find <> dw_1.getrow() Then
加入改行
Else
rollback;
dw_1.retrieve()
dw_1.scrolltorow(Ll_find)
dw_1.selectrow(0,false)
dw_1.selectrow(LL_find,true)
End iF
qiyousyc 2003-09-05
  • 打赏
  • 举报
回复
先得到子数据窗口(GetChild)。
然后按数据窗口处理子数据窗口。

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧