Foxtable(狐表)用户栏目专家坐堂 → [求助]控件写入数据问题


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

主题:[求助]控件写入数据问题

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


加好友 发短信
等级:小狐 帖子:371 积分:3120 威望:0 精华:0 注册:2013/7/13 15:49:00
[求助]控件写入数据问题  发帖心情 Post By: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控件中写数值,代码执行计算有问题,好像是当前的值不参与计算,只是计算保存之前的数值,怎么解决?为什么会这个样子?

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


加好友 发短信
等级:小狐 帖子:371 积分:3120 威望:0 精华:0 注册:2013/7/13 15:49:00
  发帖心情 Post By:2016/10/15 14:22:00 [显示全部帖子]

即使是离开控件后更新到表格,最终的到ddlr("利润") = ye这个结果也应该是正确的啊?
实际得到的结果是,新修改的这个数值没有参与计算
代码写到了:DataColChanged 里面
[此贴子已经被作者于2016/10/15 14:23:15编辑过]

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


加好友 发短信
等级:小狐 帖子:371 积分:3120 威望:0 精华:0 注册:2013/7/13 15:49:00
  发帖心情 Post By:2016/10/15 14:56:00 [显示全部帖子]

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

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


加好友 发短信
等级:小狐 帖子:371 积分:3120 威望:0 精华:0 注册:2013/7/13 15:49:00
  发帖心情 Post By:2016/10/15 15:02:00 [显示全部帖子]

订单表中AfterLoad

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

这个问题?

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

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


加好友 发短信
等级:小狐 帖子:371 积分:3120 威望:0 精华:0 注册:2013/7/13 15:49:00
  发帖心情 Post By:2016/10/15 15:24:00 [显示全部帖子]

好像是窗口加载问题,
如果目前打开的窗口只加载了当前一行,和这个有影响吗?
打开窗口修改数值,只计算当前行的数值

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


加好友 发短信
等级:小狐 帖子:371 积分:3120 威望:0 精华:0 注册:2013/7/13 15:49:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:371 积分:3120 威望:0 精华:0 注册:2013/7/13 15:49:00
  发帖心情 Post By:2016/10/15 15:46:00 [显示全部帖子]

所以只计算这一行?

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


加好友 发短信
等级:小狐 帖子:371 积分:3120 威望:0 精华:0 注册:2013/7/13 15:49:00
  发帖心情 Post By:2016/10/15 23:09:00 [显示全部帖子]

改成SQLCompute后,当前行写入的数值,又不参与计算了。。。
当前修改的数值还没有保存到后台,不参与计算
这个上次改过
[此贴子已经被作者于2016/10/15 23:14:30编辑过]

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


加好友 发短信
等级:小狐 帖子:371 积分:3120 威望:0 精华:0 注册:2013/7/13 15:49:00
  发帖心情 Post By:2016/10/16 16:53:00 [显示全部帖子]

都不是表达式列,都是双精度小数列,
做的例子是内部表,一切正常,
我觉得是窗口加载数据造成的,
1、输入数据的窗口只加载了当前数据,所以使用Compute时,只计算当前行的结果(不计算后台数据),检查计算结果也是这样的,
2、直接在表中修改数据,计算正确,因为直接在表中修改的时候,相关数据都已经加载了。
3、改成SQLCompute后,只计算后台数据,当前行修改数据不参与计算(个人认为是当前修改的数据,还没有通过保存存储到后台数据中,所以不计算),检查计算结果也是如此
不知道怎么解决这个问题,
有点蓝老师提到:还可以将窗口加载数据改成筛选,但是个人认为不太符合业务需求。不知道怎么解决?
[此贴子已经被作者于2016/10/16 16:57:02编辑过]

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


加好友 发短信
等级:小狐 帖子:371 积分:3120 威望:0 精华:0 注册:2013/7/13 15:49:00
  发帖心情 Post By:2016/10/16 22:36:00 [显示全部帖子]

问题解决了
在窗口确定的按钮中通过RaiseDataColChanged解决的。
在窗口的控件中输入数值的时候没有参与计算,只要用户点击确定按钮,就重置当前行写入的数值。
不知道以后会不会在系统中留下隐患,问题暂时解决。

 回到顶部
总数 11 1 2 下一页