以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]跨表引用问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=54814)

--  作者:lesliecheung912
--  发布时间:2014/8/5 10:57:00
--  [求助]跨表引用问题
现在想实现一个功能:当酒缸采购表中的采购数量发生改变时,对酒缸库存表的总数量进行更新,
这样在酒缸采购表的DatacolChanged事件中可以通过跨表引用来实现此功能,
但是在Datacolchanged事件中实现此功能的话会有若干问题:
1.录了一条记录然后在删除的话这个库存表中的总数量已经发生了改变,还得到BeforeDeleteDatarow中再减去之前加过的采购数量;
2.如果不先选择酒缸名称,酒缸型号和酒缸状态而直接填入数量的话就会新增一行
问:这个问题是在这个原有的基础上改呢(如果改的话,对于上面第二个问题该如何改),还是讲跨表引用的这些操作在保存的按钮里操作呢(如果在窗口的保存按钮中操作又该如何更改)?


Select Case e.DataCol.Name
    Case "采购数量"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        Dim pr1 As DataRow
        Dim filter As String
        filter = "酒缸名称 = \'" & dr("酒缸名称") & "\' And 酒缸型号 = \'" & dr("酒缸型号") & "\' And 酒缸状态 = \'" & dr("酒缸状态") & "\'"
        pr = DataTables("酒缸库存表").Find(filter)
        If pr IsNot Nothing Then
            pr("总数量") = pr("总数量") + dr("采购数量")
        Else
            pr1 = DataTables("酒缸库存表").AddNew
            pr1("酒缸名称") = dr("酒缸名称")
            pr1("酒缸型号") = dr("酒缸型号")
            pr1("酒缸状态") = dr("酒缸状态")
            pr1("总数量") = dr("采购数量")
        End If
End Select

--  作者:有点甜
--  发布时间:2014/8/5 11:01:00
--  

1、跨表统计

 

http://www.foxtable.com/help/topics/1472.htm

 


--  作者:有点甜
--  发布时间:2014/8/5 11:02:00
--  

2、判断是否为空

 

If dr.Isnull("酒缸名称") = False AndAlso dr.IsNull("酒缸型号") = False AndAlso dr.InNull("酒缸状态") = False then


--  作者:lesliecheung912
--  发布时间:2014/8/5 11:06:00
--  
这个跨表统计的方法跟我上面的代码的作用是一样的啊?
--  作者:lesliecheung912
--  发布时间:2014/8/5 11:11:00
--  
这个判断如何加,加在什么地方呢?
--  作者:有点甜
--  发布时间:2014/8/5 11:25:00
--  

1、删除的时候,肯定是需要重新统计一次的,你用统计comput,而不要用直接加减。

 

2、写在开头

 

Select Case e.DataCol.Name
    Case "采购数量"

        If dr.Isnull("酒缸名称") = False AndAlso dr.IsNull("酒缸型号") = False AndAlso dr.InNull("酒缸状态") = False then


--  作者:lesliecheung912
--  发布时间:2014/8/5 12:22:00
--  
那我在采购窗口的控件“采购数量”的TextChanged事件中写了以下代码:
If  e.Form.Controls("ComboBox3").Value = Nothing  OrElse e.Form.Controls("ComboBox2").Value = Nothing  OrElse e.Form.Controls("ComboBox1").Value = Nothing Then
    Messagebox.show("酒缸名称,酒缸型号和酒缸状态不得为空,请选择!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    e.Form.Controls("NumericComboBox2").Value = Nothing
End If
但是这么写的话,这个Message会报两次,这个问题怎么解决啊甜姐?

--  作者:有点甜
--  发布时间:2014/8/5 14:14:00
--  
If  e.Form.Controls("ComboBox3").Value = Nothing  OrElse e.Form.Controls("ComboBox2").Value = Nothing  OrElse e.Form.Controls("ComboBox1").Value = Nothing Then
    Messagebox.show("酒缸名称,酒缸型号和酒缸状态不得为空,请选择!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    SystemReady = False
    e.Form.Controls("NumericComboBox2").Value = Nothing
    SystemReady = True
End If

--  作者:lesliecheung912
--  发布时间:2014/8/5 15:08:00
--  
谢谢甜姐,再问您一个问题,ComboBox从表中取值的话,如何能将重复的值充下拉菜单里面去掉呢?
--  作者:有点甜
--  发布时间:2014/8/5 15:10:00
--  

参考

 

http://www.foxtable.com/help/topics/1435.htm

 

http://www.foxtable.com/help/topics/1523.htm