Foxtable(狐表)用户栏目专家坐堂 → 审核按钮报错


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

主题:审核按钮报错

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


加好友 发短信
等级:童狐 帖子:228 积分:2057 威望:0 精华:0 注册:2017/8/18 17:51:00
审核按钮报错  发帖心情 Post By:2018/7/6 4:06:00 [只看该作者]

窗口有一个审核按钮,当“待审核订单_Table1”表中只剩下一行,点审核按钮后报错:

.NET Framework 版本:2.0.50727.8762
Foxtable 版本:2017.12.18.1
错误所在事件:窗口,待审核订单,Button5,Click
详细错误信息:
未将对象引用设置到对象的实例.

 

 

审核按钮代码如下:

If User.Group = "经理" Then
    If Tables("待审核订单_Table1").Current IsNot Nothing Then
        Tables("待审核订单_Table1").Current("状态") = "已审核"
        Tables("待审核订单_Table1").Current("审核人") = UserName
        Tables("待审核订单_Table1").Current("审核日期") = Date.Today()
        Tables("待审核订单_Table1").Current.Save()
     End If
Else
    MessageBox.show("你无审核权限!")
End If

 

请问问题出在哪里,谢谢!

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/6 9:06:00 [只看该作者]

1、这段代码没问题。

 

2、看看你datacolchanged事件、currentChanged事件,应该有问题。加上msgbox调试一下。


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


加好友 发短信
等级:童狐 帖子:228 积分:2057 威望:0 精华:0 注册:2017/8/18 17:51:00
  发帖心情 Post By:2018/7/7 4:24:00 [只看该作者]

“待审核订单_Table1”绑定的是销售订单,在窗口中“待审核订单_Table1”的currentChanged事件加了msgbox显示正常,在销售订单表中的datacolchanged事件和currentChanged事件没有触发。

 

“待审核订单_Table1”窗口currentChanged事件代码:

If Tables("待审核订单_Table1").Rows.Count > 0 Then
    Tables("待审核订单_Table2").Filter = "订单号 = '" &  Tables("待审核订单_Table1").Current("订单号") & "'"
End If

 

 

销售订单datacolchanged事件代码:

Select Case e.DataCol.Name
    Case "总金额","折扣","已付款"
        Dim pr As DataRow
        pr = DataTables("订单付款明细表").Find("订单号 = '" & e.DataRow("订单号") & "'")
        If pr IsNot Nothing Then
            DataTables("订单付款明细表").DataCols("订单号").RaiseDataColChanged(pr)
        End If
End Select

 

 

销售订单currentChanged事件代码:

If e.Table.Current IsNot Nothing Then
    Dim Filter As String = "订单号 = '" & e.Table.Current("订单号") & "'"
    If  DataTables("销售明细表").Find(Filter) Is Nothing Then '如果对应的订单明细没有加载过
        DataTables("销售明细表").AppendLoad(Filter) '则追载此订单的订单明细
    End If
End If


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


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/7/7 9:01:00 [只看该作者]

1、如果窗口表是副本,主表要做联动:http://www.foxtable.com/webhelp/scr/2631.htm

2、窗口表是什么类型?SqlTable?
"总金额","折扣","已付款" -- 这些有没有表达式列

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


加好友 发短信
等级:童狐 帖子:228 积分:2057 威望:0 精华:0 注册:2017/8/18 17:51:00
  发帖心情 Post By:2018/7/7 15:08:00 [只看该作者]

窗口表是Normal类型,总金额和已付款是表达式列

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


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/7/7 15:37:00 [只看该作者]

是不是副本?

表达式列不会触发事件的:http://www.foxtable.com/webhelp/scr/2381.htm

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


加好友 发短信
等级:童狐 帖子:228 积分:2057 威望:0 精华:0 注册:2017/8/18 17:51:00
  发帖心情 Post By:2018/7/7 20:26:00 [只看该作者]

待审核订单_Table1,是副本表。

我在销售明细表中有针对”总金额“写触发代码:

 

If e.DataCol.Name = "数量" OrElse e.DataCol.Name = "销售单价" OrElse e.DataCol.Name = "产品型号" Then
    Dim pr As DataRow = e.DataRow.GetParentRow("销售订单") '找出对应的父行
    If pr IsNot Nothing Then
        DataTables("销售订单").DataCols("总金额").RaiseDataColChanged(pr)  '通知系统此父行的数量列发生了改变,触发DataColChanged事件
    End If
End If

 

在付款明细表有针对”已付款“写触发代码:

If e.DataCol.Name = "付款金额" Then
    Dim pr As DataRow = e.DataRow.GetParentRow("销售订单") '找出对应的父行
    If pr IsNot Nothing Then
        DataTables("销售订单").DataCols("已付款").RaiseDataColChanged(pr)  '通知系统此父行的数量列发生了改变,触发DataColChanged事件
    End If
End If

 

 


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


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/7/9 9:07:00 [只看该作者]

看4楼呀,表达式列无法触发的

DataTables("销售订单").DataCols("总金额 - 这里不能是表达式列").RaiseDataColChanged(pr)

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


加好友 发短信
等级:童狐 帖子:228 积分:2057 威望:0 精华:0 注册:2017/8/18 17:51:00
  发帖心情 Post By:2018/7/9 22:30:00 [只看该作者]

通过子表触发父表事件

还有一个特殊情况,表达式列并非由本表的列计算得出,而是由子表数据计算得出。
例如假定订单表有个数量列,是表达式列,用于累计订单明细表的数量,其表达式为:
Sum(Child.数量)。
再假定订单表的DataColChanged事件设置了如下代码:

If e.DataCol.name = "数量" Then
  '相关计算代码 
End If

当我们在订单明细表输入数量时,订单表的数量会自动更新,但是上面的代码永远不会执行,因为数量是一个表达式列,不会触发事件。
我们需要在订单明细表的
DataColChanged事件加上代码:

If e.DataCol.name = "数量" Then
    Dim
pr As DataRow = e.DataRow.GetParentRow("订单") '找出对应的父行
    If
pr IsNot Nothing Then
        DataTables(
"订单").DataCols("数量").RaiseDataColChanged(pr'通知系统此父行的数量列发生了改变,触发DataColChanged事件
    End If
End If

这样在订单明细表输入数量,就会在订单表针对该订单的数量列触发DataColChanged事件。

 

例子中订单表的数量列也是表达式列啊


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


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/7/9 22:42:00 [只看该作者]

嗯,这个看错了。

做个例子过来看看

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