以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]控件写入数据问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=91629)

--  作者:viking
--  发布时间:2016/10/14 23:19:00
--  [求助]控件写入数据问题
做了一个类似简单的利润计算

Dim ddbh As String = e.DataRow("订单编号")
Select Case e.DataCol.Name
    Case "收入","支出"
        Dim sr As Double
        Dim zc As Double
        Dim ye As Double
        sr = e.DataTable.Compute("sum(收入)","[订单编号] = \'" & ddbh & "\'")
        zc = e.DataTable.Compute("sum(支出)","[订单编号] = \'" & ddbh & "\'")
        ye = sr - zc
        MessageBox.Show(ddbh)
        MessageBox.Show(sr)
        MessageBox.Show(zc)
        MessageBox.Show(ye)
        Dim ddlr As DataRow = DataTables("订单").Find("[订单编号] = \'" & ddbh & "\'")
        ddlr("利润") = ye
End Select

代码应该没什么问题,直接在表中修改收入和支出,运算没有问题,但是做了个窗口,控件TextBox绑定到收入或者支出列,在TextBox控件中写数值,代码执行计算有问题,好像是当前的值不参与计算,只是计算保存之前的数值,怎么解决?为什么会这个样子?

--  作者:有点蓝
--  发布时间:2016/10/15 9:49:00
--  
控件要离开焦点,输入的内容才会更新到表格
--  作者:viking
--  发布时间:2016/10/15 14:22:00
--  
即使是离开控件后更新到表格,最终的到ddlr("利润") = ye这个结果也应该是正确的啊?
实际得到的结果是,新修改的这个数值没有参与计算
代码写到了:DataColChanged 里面
[此贴子已经被作者于2016/10/15 14:23:15编辑过]

--  作者:有点蓝
--  发布时间:2016/10/15 14:39:00
--  
上传例子测试
--  作者:viking
--  发布时间:2016/10/15 14:56:00
--  
做了个例子,没有问题,不上传了,
但是项目中的问题还是不行,和项目的sql环境有关系?
sql
订单[_Identify] Is Null
订单明细[_Identify] Is Null
有关系吗?
已经同步加载了订单表和子表的订单明细表的数据了
感觉问题不是出在这里,直接订单明细表中修改  计算正确
在窗口中修改数据          计算错误(不计算本行数值)
[此贴子已经被作者于2016/10/15 14:59:55编辑过]

--  作者:viking
--  发布时间:2016/10/15 15:02:00
--  
订单表中AfterLoad

e.DataTable.LoadChildren("订单明细")

这个问题?

[此贴子已经被作者于2016/10/15 15:02:34编辑过]

--  作者:viking
--  发布时间:2016/10/15 15:24:00
--  
好像是窗口加载问题,
如果目前打开的窗口只加载了当前一行,和这个有影响吗?
打开窗口修改数值,只计算当前行的数值

--  作者:有点蓝
--  发布时间:2016/10/15 15:38:00
--  
窗口表是什么类型,怎么加载的?
--  作者:viking
--  发布时间:2016/10/15 15:45:00
--  
模式窗口,
If Forms("收款").Opened Then
    Tables("订单明细").Cols("收付款负责").Caption = "收款_负责"
    Tables("订单明细").Cols("收付款日期").Caption = "收款_日期"
    Tables("订单明细").BuildHeader()
    DataTables("订单明细").LoadOrder = "[摘要日期]"
    DataTables("订单明细").LoadFilter = "[公司编码] = \'" & _UserGsbm & "\' and [收付款负责] is null and [收支方式] = \'现金收入\' or [公司编码] = \'" & _UserGsbm & "\' and [收付款负责] is null and [收支方式] =  \'汇款收入\'"
    DataTables("订单明细").Load
End If
这个窗口打开时,估计只加载了这一行数据

--  作者:viking
--  发布时间:2016/10/15 15:46:00
--  
所以只计算这一行?