Foxtable(狐表)用户栏目专家坐堂 → 请教:主表与子表的判断.


  共有8550人关注过本帖树形打印复制链接

主题:请教:主表与子表的判断.

帅哥哟,离线,有人找我吗?
飞天
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1914 威望:0 精华:0 注册:2012/6/6 17:08:00
请教:主表与子表的判断.  发帖心情 Post By:2012/9/17 14:23:00 [只看该作者]

主表是"订单"  并且有一个"审核"列;

子表是"订单明细"  同样有一个"审核"列.

 

当要对订单表的"审核"列进行编辑时,先判断子表"审核"列是否全部为 True,否则不能编辑

 

请问这样的代码如何实现?


 回到顶部
帅哥哟,离线,有人找我吗?
lin_hailun
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/9/17 14:32:00 [只看该作者]

 如果生成了关联表,可以如下写代码。

For Each r As Row In Tables("订单.订单明细").Rows
    If r("审核") = False Then
        e.Cancel = True
        exit For
    End If
Next
[此贴子已经被作者于2012-9-17 14:33:13编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
飞天
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1914 威望:0 精华:0 注册:2012/6/6 17:08:00
  发帖心情 Post By:2012/9/17 14:47:00 [只看该作者]

问题已经解决,非常感谢您!

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/9/17 17:49:00 [只看该作者]

真是凑巧,前些天在帮助加了一节,其中示例三和楼主一模一样:

 

关联表与事件
关联表之间的数据和操作,有时是相互依存的,某一方进行的操作,经常需要在另一方进行条件判断。
在子表的事件中,我们可以通过GetParentRow获得父行,在父表的事件中,可以通过GetChildRows获得全部子行。

示例一
假定订单和订单明细表已经建立关联,订单表有个客户等级列,订单明细表有个折扣列,要求只有客户等级为VIP的时候,才允许折扣超过10%。
为此可以在订单明细表的DataColChanging事件中设置代码:
If e.DataCol.Name = "折扣" Then
    If e.NewValue > 0.1 Then
        Dim pr As DataRow = e.DataRow.GetParentRow("订单")
        If pr IsNot Nothing Then
            If pr("客户等级") <> "VIP" Then
                MessageBox.show("非VIP客户的折扣不能超过10%", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
                e.Cancel = True
            End If
        End If
    End If
End If

示例二
假定希望锁定某订单时,能同时锁定其对应的全部订单明细,反之亦然。
要实现此目的,只需将订单表的DataRowLockedChanged事件代码设置为:
For Each dr As DataRow In e.DataRow.GetChildRows("订单明细")
    dr.Locked = e.DataRow.Locked
Next

示例三

假定订单和订单明细表都有一个名为“审核”的列,逻辑型,要求某订单的所有订单明细全部审核通过后,才能审核订单。
为此可以将订单表的PrepareEdit事件代码设置为:
If e.Col.name = "审核" Then
    For Each dr As DataRow In e.Row.DataRow.GetChildRows("订单明细")
        If dr("审核") = False Then
            e.Cancel = True
            Exit For
        End If
    Next
End If

示例四
假定订单和订单明细表都有一个名为“审核”的列,逻辑型。
当某个订单的所有订单明细全部通过审核后,此订单也自动审核通过,当某订单的任何一个订单明细取消审核后,此订单也自动取消审核。
为此可以将订单明细表的DataColChanged事件代码设置为:
If e.DataCol.name = "审核" Then
    Dim pr As DataRow = e.DataRow.GetParentRow("订单")
    If pr IsNot Nothing Then
        Dim crs As List(of DataRow) = pr.GetChildRows("订单明细")
        Dim cnt As Integer
        For Each cr As DataRow In crs
            If cr("审核") = True
                cnt = cnt + 1
            End If
        Next
        pr("审核") = (crs.Count = cnt)
    End If
End If


 回到顶部