Foxtable(狐表)用户栏目专家坐堂 → [求助]关于子表触发父表事件的简洁写法


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

主题:[求助]关于子表触发父表事件的简洁写法

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


加好友 发短信
等级:小狐 帖子:384 积分:4174 威望:0 精华:0 注册:2011/12/31 14:28:00
[求助]关于子表触发父表事件的简洁写法  发帖心情 Post By:2015/5/31 14:55:00 [只看该作者]

关于通过子表出发父表表达式列的DataColChanged 事件,由于父表好几列都是表达式列,而且数据都是是通过子表统计而得的,我在子表DataColChanged 中写下面代码,是可以触发父表事件的,但写成下面红色部分的代码时会出错,请帮我看下是错在哪!

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

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

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

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

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

能写成下面怎样吗,我写成下面这样的形式会执行错误,帮我看下哪有问题,或者有什么简洁一点的写法

 

Select Case e.DataCol.name
    Case "XiaoShouDanMingXi_ShuLiang" ,"XiaoShouDanMingXi_PiFaJia","XiaoShouDanMingXi_YouHuiJia","XiaoShouDanMingXi_ChengBenJia","XiaoShouDanMingXi_LingShouJia"
    Dim  pr As  DataRow = e.DataRow.GetParentRow("XiaoShouDan")  '找出对应的父行
       If  pr IsNot Nothing Then
         DataTables("XiaoShouDan").DataCols("XiaoShouDan_ShuLiang").RaiseDataColChanged(pr)   '通知系统此父行的数量列发生了改变,触发DataColChanged事件
         DataTables("XiaoShouDan").DataCols("XiaoShouDan_ChengBenE").RaiseDataColChanged(pr)
         DataTables("XiaoShouDan").DataCols("XiaoShouDan_PiFaE").RaiseDataColChanged(pr)
         DataTables("XiaoShouDan").DataCols("XiaoShouDan_YouHuiE").RaiseDataColChanged(pr)
         DataTables("XiaoShouDan").DataCols("XiaoShouDan_LingShouE").RaiseDataColChanged(pr)
         DataTables("XiaoShouDan").DataCols("XiaoShouDan_MaoLi").RaiseDataColChanged(pr)
         DataTables("XiaoShouDan").DataCols("XiaoShouDan_YingShouKuanE").RaiseDataColChanged(pr)
       End If
End Select


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/31 14:59:00 [只看该作者]

 不要像红色代码那样写。

 

 你这样写,每修改一列,就会触发多列的值的变化,效率不高。建议还是分开处理。

 

 同时,红色代码不可能报错。


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


加好友 发短信
等级:小狐 帖子:384 积分:4174 威望:0 精华:0 注册:2011/12/31 14:28:00
  发帖心情 Post By:2015/5/31 15:26:00 [只看该作者]

哦,是我把一个字段引用错了

还有个问题,如果子表中的有表达式列 客户名称,是通过 Parent 引用父表的 客户 列数据,那怎么在父表中触发子表 客户名称 列的DataColChanged 呢,请帮写代码好吗

[此贴子已经被作者于2015/5/31 15:29:23编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/31 15:29:00 [只看该作者]

 无法子表表达式列的事件的。

 

 对应的代码,写到父表的Datacolchanged事件里;或者是去触发子表非表达式列。


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


加好友 发短信
等级:小狐 帖子:384 积分:4174 威望:0 精华:0 注册:2011/12/31 14:28:00
  发帖心情 Post By:2015/5/31 15:34:00 [只看该作者]

那意思只能用跨表引用更新的方法来触发非表达式列事件了,是吧

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/31 15:45:00 [只看该作者]

 如果你的计算写到父表,就必须用跨表引用;

 

 如果触发子表某列,就直接还是用RaiseDataColChanged


 回到顶部