以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]多条件判断,自动返回值。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=184475)

--  作者:mengxxaa
--  发布时间:2022/12/9 14:15:00
--  [求助]多条件判断,自动返回值。
举例:状态栏这里,有三种状态。1.当未交数量=0时,状态返回:未执行;2.当 0<数量-交货数量<数量时,状态返回:执行未完结;3.数量-交货数量=<0时,状态返回:执行完毕,并不允许再修改。
现在是用列表项目,人工判断实现。
如何自动实现,求可参考的例子或者代码提示。
图片点击可在新窗口打开查看此主题相关图片如下:多条件判断.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2022/12/9 15:05:00
--  
到datacolchanged事件处理:http://www.foxtable.com/webhelp/topics/0625.htm

Select Case e.DataCol.Name
    Case 
"数量","交货数量"
        If e.DataRow.IsNull("数量") orelse e.DataRow.IsNull("交货数量") Then
if e.DataRow.IsNull("交货数量") then
e.DataRow("状态") = "未执行"
end if
        Else
if e.DataRow("数量") > e.DataRow("交货数量")
e.DataRow("状态") = "执行未完结"
else 
e.DataRow("状态") = "执行完毕"
e.DataRow.Locked = True
        End
 If
End
 
Select

--  作者:mengxxaa
--  发布时间:2022/12/9 16:48:00
--  
感谢老师指点。我忘记补充了,交货数量是表达列,数据来源于统计关联表上的。
这种情况如何处理呢?

--  作者:有点蓝
--  发布时间:2022/12/9 16:59:00
--  
参考:http://www.foxtable.com/webhelp/topics/2381.htm
--  作者:mengxxaa
--  发布时间:2022/12/12 10:23:00
--  
补充,父表的问题处理好了。当父表执行完毕后,怎么样触发子表不能再对父表状态为执行完毕的行再添加明细呢。
参照这里http://www.foxtable.com/webhelp/index.htm?page=0625.htm
的代码:
For Each dr As DataRow In e.DataRow.GetChildRows("订单明细")
    dr.Locked = e.DataRow.Locked
Next
锁定了子表,但是子表还是可添加明细。
想要的效果就是:一个订单交付完之后,状态为执行完结,子表就不能对这个订单再生成送货明细了。

--  作者:有点蓝
--  发布时间:2022/12/12 10:43:00
--  
子表BeforeAddDataRow事件,判断父表当前行是不是已经执行完毕,如果是就取消新增e.cancel=true
--  作者:mengxxaa
--  发布时间:2022/12/12 14:14:00
--  
   在子表BeforeAddDataRow事件添加如下代码:显示未将对象引用设置到对象的实例。这么短的代码,不知道怎么加messagebox调试
Dim pr As DataRow = e.DataRow.GetParentRow("父表") \'
        If pr IsNot Nothing Then
            If pr("状态") = "执行完毕" Then \'父表条件
                e.Cancel = True
            End If
        End If


--  作者:有点蓝
--  发布时间:2022/12/12 14:22:00
--  
Dim pr As Row = tables("父表").current \'
        If pr IsNot Nothing Then
            If pr("状态") = "执行完毕" Then \'父表条件
                e.Cancel = True
            End If
        End If