Foxtable(狐表)用户栏目专家坐堂 → 代码改变值后,表事件:DataColChanged 中的代码未执行。


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

主题:代码改变值后,表事件:DataColChanged 中的代码未执行。

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


加好友 发短信
等级:四尾狐 帖子:842 积分:5971 威望:0 精华:0 注册:2013/6/29 9:36:00
代码改变值后,表事件:DataColChanged 中的代码未执行。  发帖心情 Post By:2015/9/6 10:24:00 [只看该作者]


表:客户,表事件:DataColChanged  写入:
Select Case e.DataCol.Name
    Case "客户编号"
        DataTables("销售订单").ReplaceFor(e.DataCol.Name,e.NewValue,"客户编号 = '" & e.OldValue & "'")
End Select
表:销售订单,表事件:DataColChanged  写入:
If e.DataCol.Name = "客户编号" Then
    Dim cmd As New SQLCommand
    Dim dt As DataTable
    cmd.C
    Dim dr As DataRow = e.DataRow
    cmd.CommandText = "SELECT * Fro m {客户} Where [客户编号] = '" & dr("客户编号") & "'"
    dt = cmd.ExecuteReader
    If dt.DataRows.Count > 0 Then
        dr("客户") = dt.DataRows(0)("公司名称")
    Else
        dr("客户")= Nothing
    End If
End If

当表:客户,客户编号,发生变化后, 销售订单,表,中的:客户编号,可以更新,但是,表中的:客户,无法获取:客户表的:公司名称。
也就是说:表:销售订单,表事件:DataColChanged 中的代码未执行。
请问是哪里的问题,怎么解决呢?

在:销售订单,新增加行,输入:客户编号 ,或都:重置:客户编号列,可以更新:客户。就是通过代码改变:客户编号,后,无法自动更新。

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


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

select 获取的,是保存后的数据,你这样写

 

Select Case e.DataCol.Name
    Case "客户编号"
        DataTables("销售订单").SqlReplaceFor(e.DataCol.Name,e.NewValue,"客户编号 = '" & e.OldValue & "'")
        DataTables("销售订单").ReplaceFor(e.DataCol.Name,e.NewValue,"客户编号 = '" & e.OldValue & "'")
End Select

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


加好友 发短信
等级:四尾狐 帖子:842 积分:5971 威望:0 精华:0 注册:2013/6/29 9:36:00
  发帖心情 Post By:2015/9/6 10:35:00 [只看该作者]

 可不可以,只写:

    DataTables("销售订单").SqlReplaceFor(e.DataCol.Name,e.NewValue,"客户编号 = '" & e.OldValue & "'")

不写:
        DataTables("销售订单").ReplaceFor(e.DataCol.Name,e.NewValue,"客户编号 = '" & e.OldValue & "'")

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


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

不写,就无法在foxtable里触发DataColChanged事件。

 

要不你把select语句,改成find函数或者sqlfind函数。


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


加好友 发短信
等级:四尾狐 帖子:842 积分:5971 威望:0 精华:0 注册:2013/6/29 9:36:00
  发帖心情 Post By:2015/9/6 10:54:00 [只看该作者]

我在客户表,事件,写入:
Select Case e.DataCol.Name
    Case "客户编号"
        DataTables("销售订单").SqlReplaceFor(e.DataCol.Name,e.NewValue,"客户编号 = '" & e.OldValue & "'")
        DataTables("销售订单").ReplaceFor(e.DataCol.Name,e.NewValue,"客户编号 = '" & e.OldValue & "'")
End Select
还是跟之前一样,可以更新:销售订单的,客户编号。但是,客户,更不自动更新。
还是销售订单,的表事件,更改更新未执行。(代码未改,还是SELECT)

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


加好友 发短信
等级:四尾狐 帖子:842 积分:5971 威望:0 精华:0 注册:2013/6/29 9:36:00
  发帖心情 Post By:2015/9/6 10:57:00 [只看该作者]

而且,我在客户表,更改,客户编号时,数据是保存了的。按理说,销售订单,表事件执行时,应该能获取最新修改的:客户编号和客户。(公司名称)

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


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

Select Case e.DataCol.Name
    Case "客户编号"
        DataTables("销售订单").ReplaceFor(e.DataCol.Name,e.NewValue,"客户编号 = '" & e.OldValue & "'")
        DataTables("销售订单").DataCols("客户编号").RaiseDataColChanged("客户编号 = '" & e.OldValue & "'")
End Select

 

-----------------

 

If e.DataCol.Name = "客户编号" Then
    Dim dr As DataRow = DataTables("客户").Find("[客户编号] = '" & dr("客户编号") & "'")
    If dr IsNot Nothing Then
        dr("客户") = dr("公司名称")
    Else
        dr("客户")= Nothing
    End If
End If


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


加好友 发短信
等级:四尾狐 帖子:842 积分:5971 威望:0 精华:0 注册:2013/6/29 9:36:00
  发帖心情 Post By:2015/9/6 11:13:00 [只看该作者]

客户表:
Select Case e.DataCol.Name
    Case "客户编号"
        DataTables("销售订单").ReplaceFor(e.DataCol.Name,e.NewValue,"客户编号 = '" & e.OldValue & "'")
        DataTables("销售订单").DataCols("客户编号").RaiseDataColChanged("客户编号 = '" & e.OldValue & "'")
End Select
销售订单:
If e.DataCol.Name = "客户编号" Then
    Dim dr As DataRow = DataTables("客户").Find("客户编号 = '" & e.DataRow("客户编号") & "'")
    If dr IsNot Nothing Then
        e.DataRow("客户") = dr("公司名称")
    Else
        e.DataRow("客户")= Nothing
    End If
End If

还是不行,跟以前一样。

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


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

Select Case e.DataCol.Name
    Case "客户编号"
        DataTables("销售订单").ReplaceFor(e.DataCol.Name,e.NewValue,"客户编号 = '" & e.OldValue & "'")
        DataTables("销售订单").DataCols("客户编号").RaiseDataColChanged("客户编号 = '" & e.NewValue & "'")
End Select

 

-----------------

 

If e.DataCol.Name = "客户编号" Then
    Dim dr As DataRow = DataTables("客户").Find("[客户编号] = '" & dr("客户编号") & "'")
    If dr IsNot Nothing Then
        dr("客户") = dr("公司名称")
    Else
        dr("客户")= Nothing
    End If
End If


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


加好友 发短信
等级:四尾狐 帖子:842 积分:5971 威望:0 精华:0 注册:2013/6/29 9:36:00
  发帖心情 Post By:2015/9/6 11:26:00 [只看该作者]

上面的代码,还是不符合要求,销售订单的,客户,还是旧值。
我把客户表的代码写成下面的,就行了。
Select Case e.DataCol.Name
    Case "客户编号"
        DataTables("销售订单").ReplaceFor(e.DataCol.Name,e.NewValue,"客户编号 = '" & e.OldValue & "'")
    Case "公司名称"
        DataTables("销售订单").DataCols("客户编号").RaiseDataColChanged("客户编号 = '" & e.DataRow("客户编号") & "'")
End Select

但是,不知道有没有更好的办法?

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