以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关联与增加行导致崩溃退出的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=64497)

--  作者:swagger
--  发布时间:2015/2/15 23:29:00
--  关联与增加行导致崩溃退出的问题

在帮助文件有个代码,按照代码输入之后,点击窗口增加订单后,foxtable崩溃然后退出,是怎么回事?

 

 

附:

有的时候,希望父表增加一行后,能够在子表自动对应增加一行,以提高输入效率。
例如订单和订单明细表,通过订单编号建立关联,希望新增一订单,并输入订单编号后,能自动为该订单增加一个订单明细。
为此可以设置订单表的DataColChanged事件为:

Select Case e.DataCol.Name
    Case "订单编号"
        If e.DataRow.IsNull("订单编号") = False Then \'如果已经输入订单编号
            If e.DataRow.GetChildRows("订单明细").Count = 0 Then \'而且无订单明细
                Dim dr As DataRow = DataTables("订单明细").AddNew()
                dr("订单编号") = e.DataRow("订单编号")
            End If
        End If
End Select


--  作者:有点甜
--  发布时间:2015/2/23 11:16:00
--  

Select Case e.DataCol.Name
    Case "订单编号"
        If e.DataRow.IsNull("订单编号") = False Then \'如果已经输入订单编号
            If e.DataRow.GetChildRows("订单明细").Count = 0 Then \'而且无订单明细
                systemready = False
                Dim dr As DataRow = DataTables("订单明细").AddNew()
                dr("订单编号") = e.DataRow("订单编号")
                systemready = True
            End If
        End If
End Select

 


--  作者:swagger
--  发布时间:2015/2/23 14:16:00
--  

谢谢,这个问题已经解决了。 另外还有个问题是,按照帮助文件的代码订单和订单明细互相删除会出现错误:

 

 

1. 在订单表的BeforeDeleteDataRow事件代码设置为:

If e.DataRow.GetChildRows("订单明细").Count > 0 Then
    Dim s As String = "此订单存在订单明细, 是否确定要删除此订单及其订单明细?"
   
If MessageBox.Show(s,"提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.No
        e.Cancel=
True
   
End If
End
If

2.

在订单明细的DataRowDeleting输入:

Dim pr As DataRow = e.DataRow.GetParentRow("订单") \'获得此明细对应的订单

If pr IsNot  Nothing Then \'如果有对应的订单

     If pr.GetChildRows("订单明细").count  = 1 Then \'且这个订单的明细只有一个了

           pr.Delete \'删除这个订单

     End If

End If

 

然后删除订单明细最后一行时,会提示:"此订单存在订单明细, 是否确定要删除此订单及其订单明细?" ,然后出现错误:调用的目标发生了异常。
不能在 OnRowDeleting 事件内部调用 Delete。引发异常以取消此删除。

 

 

请问这个怎么解决?


--  作者:有点甜
--  发布时间:2015/2/23 14:34:00
--  
systemready = False
pr.Delete \'删除这个订单
systemready = True

--  作者:swagger
--  发布时间:2015/2/23 15:04:00
--  
以下是引用有点甜在2015/2/23 14:34:00的发言:
systemready = False
pr.Delete \'删除这个订单
systemready = True

这个方法貌似不行啊


--  作者:有点甜
--  发布时间:2015/2/23 15:05:00
--  
 例子发上来。
--  作者:swagger
--  发布时间:2015/2/23 16:00:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:订单和订单明细互删冲突.foxdb


--  作者:有点甜
--  发布时间:2015/2/23 16:17:00
--  
   
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目152.foxdb


--  作者:swagger
--  发布时间:2015/2/23 16:57:00
--  
以下是引用有点甜在2015/2/23 16:17:00的发言:
   
 下载信息  [文件大小:404.0 KB  下载次数:0]
图片点击可在新窗口打开查看点击浏览该文件:管理项目152.foxdb

 

删除订单明细可以了,但是倒过来删除订单又不行了


--  作者:有点甜
--  发布时间:2015/2/23 17:08:00
--  

 主表删除代码

 

If e.DataRow.GetChildRows("订单明细").Count > 0 Then
    Dim s As String = "此订单存在订单明细, 是否确定要删除此订单及其订单明细?"
    If MessageBox.Show(s,"提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.No
        e.Cancel= True
    Else
        systemready = False
        DataTables("订单明细").DeleteFor("单号 = \'" & e.DataRow("单号") & "\'")
        systemready = True
    End If
End If