以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  删除之后的保存问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=145738)

--  作者:lal021962
--  发布时间:2020/2/6 9:53:00
--  删除之后的保存问题

侧面还行 9:43:09
在父表窗口中的关联子表增加行,保存退出父表窗口后可以直接关闭项目


但是在父表窗口中,删除关联子表的行后,保存退出父表窗口,若要关闭项目,必须再保存一次是什么原因



--  作者:有点蓝
--  发布时间:2020/2/6 10:20:00
--  
保存退出父表窗口  - 这里的保存有没有保存子表?
--  作者:lal021962
--  发布时间:2020/2/6 10:23:00
--  

保存了,代码如下

With Tables("销售定单主表")
    If .Current IsNot Nothing Then
        Dim drs As List (of DataRow)=.Current.DataRow.getchildrows("销售定单明细表")
        For Each dr As DataRow In drs
            dr.Save()
        Next
        .Current.Save()
    End If
End With


--  作者:有点蓝
--  发布时间:2020/2/6 10:27:00
--  
这种保存对删除的行无效

With Tables("销售定单主表")

    If .Current IsNot Nothing Then
        tables("销售定单明细表").save
        .Current.Save()
    End If
End With
--  作者:lal021962
--  发布时间:2020/2/6 10:42:00
--  
如果用这个代码的话,我明细表删除之后,窗口不用保存都可以关闭了
--  作者:lal021962
--  发布时间:2020/2/6 10:44:00
--  

before close 代码如下:

 

Dim drs As List (of DataRow)=Tables("销售定单主表").current.DataRow.getchildrows("销售定单明细表")
For Each dr As DataRow In drs
If dr.Rowstate <> DataRowstate.unchanged Then \'如果当前行已经修改过
    e.Cancel = True
MessageBox.Show("内容已更改,请保存或撤销")
ElseIf dr.isnull("数量") Then
e.Cancel = True
MessageBox.Show("销售定单明细表有空行")
End If
Next


--  作者:有点蓝
--  发布时间:2020/2/6 10:51:00
--  
这种方法一样无法判断删除的行,这样判断即可:http://www.foxtable.com/webhelp/topics/0387.htm
--  作者:lal021962
--  发布时间:2020/2/6 11:30:00
--  

如果明细表删除行,如下语句在beforeclose里执行无效吗:

 

If DataTables("销售定单明细表").HasChanges Then 

    e.Cancel = True
MessageBox.Show("内容已更改,请保存或撤销")
End If

 

 


--  作者:lal021962
--  发布时间:2020/2/6 11:31:00
--  

这个主表有很多明细表,之前都是在beforeclose里执行的,我想还是在beforeclose里判断


--  作者:有点蓝
--  发布时间:2020/2/6 11:48:00
--  
beforeclose肯定可以的,这个是主窗口?如果是同一个表的2个主窗口,打开A主窗口,B主窗口会被自动关闭,且B主窗口beforeclose无效。