以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  【求助】列值第一次录入便生成数据,那么我修改列值之后,直接修改对应记录,而不是新增记录  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=102447)

--  作者:李孝春
--  发布时间:2017/6/20 9:26:00
--  【求助】列值第一次录入便生成数据,那么我修改列值之后,直接修改对应记录,而不是新增记录
【求助】列值第一次录入便生成数据,那么我修改列值之后,直接修改对应记录,而不是新增记录


代码如下:
Select Case e.DataCol.Name
    Case "单价"
        If e.DataCol.Name = "单价" Then
            e.DataRow("金额")=e.DataRow("单价")*e.DataRow("数量")
        End If
    Case "数量"
        If e.DataCol.Name = "数量" Then
            e.DataRow("金额")=e.DataRow("单价")*e.DataRow("数量")
            \'以下是当数量列发生变动时候,写入信息到货物库存表里
            Tables("货物库存").AddNew()
            Tables("货物库存").Current("货名")= e.DataRow("货名") 
            Tables("货物库存").Current("出库数量")= e.DataRow("数量")
            Tables("货物库存").Current("出库日期")= e.DataRow("订单日期")
            Tables("货物库存").Current("出库编号")= e.DataRow("销售年编号")
            
           \'怎么实现在数量被我修改后,顺利实行下面代码呢?而不是新增一条记录!
            Dim pr As DataRow
            pr = DataTables("货物库存").Find("货名 = \'" & e.DataRow("货名") & "\' And 出库编号 = \'" & e.DataRow("销售年编号") & "\'")
            If pr IsNot Nothing Then
                pr("出库数量")= pr("出库数量")  + e.NewValue - e.OldValue
            End If
        End If
End Select
[此贴子已经被作者于2017/6/20 9:26:17编辑过]

--  作者:有点色
--  发布时间:2017/6/20 9:42:00
--  
Select Case e.DataCol.Name
    Case "单价"
        If e.DataCol.Name = "单价" Then
            e.DataRow("金额")=e.DataRow("单价")*e.DataRow("数量")
        End If
    Case "数量"
        If e.DataCol.Name = "数量" Then
            Dim pr As DataRow
            pr = DataTables("货物库存").Find("货名 = \'" & e.DataRow("货名") & "\' And 出库编号 = \'" & e.DataRow("销售年编号") & "\'")
            If pr IsNot Nothing Then
                pr("出库数量")= pr("出库数量")  + e.NewValue - e.OldValue
            Else
                e.DataRow("金额")=e.DataRow("单价")*e.DataRow("数量")
                \'以下是当数量列发生变动时候,写入信息到货物库存表里
                Dim nr As Row = Tables("货物库存").AddNew()
                nr("货名")= e.DataRow("货名")
                nr("出库数量")= e.DataRow("数量")
                nr("出库日期")= e.DataRow("订单日期")
                nr("出库编号")= e.DataRow("销售年编号")
            End If          
        End If
End Select

--  作者:李孝春
--  发布时间:2017/6/20 9:53:00
--  回复:(有点色)Select Case e.DataCol.Name?&n...

现在是可以不新增空值行了,效果如下:

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

如果再次增加同样货名的东西,就会修改总值,而不是新增一条记录进货物库存表里,如果我把这条订单记录删除,就会把所有当前的记录全部删除,而不是在数量上减去我对应删除行数量,重新计算成为新值。


图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:4.png
图片点击可在新窗口打开查看


[此贴子已经被作者于2017/6/20 10:02:50编辑过]

--  作者:有点色
--  发布时间:2017/6/20 9:56:00
--  
 你删除记录的时候,查找对应的行,减去相应的值,不就好了?改写你的DataRowDeleting事件。
--  作者:李孝春
--  发布时间:2017/6/20 10:11:00
--  回复:(有点色) 你删除记录的时候,查找对应的...
谢谢有点色老师

采用下面代码解决了
Dim dr As DataRow = DataTables("货物库存").Find("货名 = \'" & e.DataRow("货名") & "\' And 出库编号 = \'" & e.DataRow("销售年编号") & "\'")
If dr IsNot Nothing Then
    dr("出库数量")= dr("出库数量")  - e.DataRow("数量") 
    If dr("出库数量")= 0 Then
        dr.Delete()
    End If
End If