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


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

主题:代码改变值后,表事件: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 中的代码未执行。
请问是哪里的问题,怎么解决呢?

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

 回到顶部
帅哥哟,离线,有人找我吗?
yancheng
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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 & "'")

 回到顶部
帅哥哟,离线,有人找我吗?
yancheng
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
yancheng
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

还是不行,跟以前一样。

 回到顶部
帅哥哟,离线,有人找我吗?
yancheng
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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

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


加好友 发短信
等级:四尾狐 帖子:842 积分:5971 威望:0 精华:0 注册:2013/6/29 9:36:00
  发帖心情 Post By:2015/9/6 12:10:00 [显示全部帖子]

我用同样的方法,用在:关联表中。还是有问题。
问题是:父表,在更改:编号,时,子表可以自动更改:编号 ;名称,为空;
父表,在更改:名称,时,子表可正常更改:名称。
父表,先更改:编号 ,再更改:名称。子表可自动更改:编号 ,名称,为空。

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


加好友 发短信
等级:四尾狐 帖子:842 积分:5971 威望:0 精华:0 注册:2013/6/29 9:36:00
  发帖心情 Post By:2015/9/6 12:43:00 [显示全部帖子]

试了一下,下面的代码。

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

Case "公司名称"
DataTables("销售订单").ReplaceFor("客户",e.NewValue, "客户编号 = '" & e.DataRow("客户编号") & "'")


如果,父表只改:编号,不改:名称;
子表的名称,还是不自动更新.

(我说的是关联表哈。)
之前不是关联表的,我用我刚才的代码,如下,可以正常使用了。就是关联不行。
客户表:
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

[此贴子已经被作者于2015/9/6 12:44:17编辑过]

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


加好友 发短信
等级:四尾狐 帖子:842 积分:5971 威望:0 精华:0 注册:2013/6/29 9:36:00
  发帖心情 Post By:2015/9/6 14:21:00 [显示全部帖子]

Select Case e.DataCol.Name
    Case "合同编号"
        DataTables("采购订单").ReplaceFor("合同名称",e.DataRow("合同名称"),"合同编号 = '" & e.NewValue & "'")
    Case "合同名称"
        DataTables("采购订单").ReplaceFor("合同名称",e.NewValue,"合同编号 = '" & e.DataRow("合同编号") & "'")
End Select
我用这个方法,解决了。

但是,感觉还是哪里没有太理解透。以后具体这种情况用哪种方法,还是不是很清楚。

我的感觉是:关联表,关联列(合同编号),它因为是关联,所以系统,自动这把值改了。
感觉在用:e.NewValue ,和e.oldvalue时,注意一下。
还是就是:关联表时,用:RaiseDataColChanged好像不行。
[此贴子已经被作者于2015/9/6 14:23:43编辑过]

 回到顶部