以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]同步更新问题?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=11139)

--  作者:Tommy
--  发布时间:2011/7/9 11:38:00
--  [求助]同步更新问题?

主表A(ID、Remark)与子表B(AID、Remark、列1、列2)关联(A.ID=B.AID),同步更新表数据

 

子表B的DataColChanged事件代码:(通过AID将表A数据列Remark内容复制到表B的Remark列)

If e.DataCol.Name = "AID" Then
    Dim dr As DataRow = e.DataRow.GetParentRow("A")
    If dr IsNot Nothing Then
        e.DataRow("Remark") = dr("Remark")
    Else
        e.DataRow("Remark") = Nothing
    End If
End If

 

当更新主表A的ID列时,我发现是先执行表B的DataColChanged事件,再执行表A的DataColChanged事件,

导致表B里的Remark列内容为空!

 

有什么办法能解决?


--  作者:狐狸爸爸
--  发布时间:2011/7/9 11:42:00
--  

http://help.foxtable.com/topics/1644.htm

 


--  作者:Tommy
--  发布时间:2011/7/9 11:46:00
--  

狐爸,你没看懂我说的问题,再看清楚。

我已经设了同步更新列内容,所以在表A的ID列修改时,表B的ID列也修改,从而触发表B的DataColChanged事件,但是这里有个顺序问题,就是它先执行了表B的DataColChanged事件再把表A的ID修改完成,导致表B的DataColChanged事件里取得的ID还是原来的数据不是修改后的数据。

[此贴子已经被作者于2011-7-9 11:53:26编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/7/9 11:53:00
--  

1、设置关联的时候,取消同步更新关联列选项

2、代码应该设置在DataColChanging事件,而不是DataColChanged事件。


--  作者:Tommy
--  发布时间:2011/7/9 11:57:00
--  

取消同步更新关联列的话,那我修改表A的ID时,表B的AID就不会更新了,更不会触发表B的DataColChanged事件和DataColChanging事件


--  作者:Tommy
--  发布时间:2011/7/11 9:07:00
--  

这个怎么没人解决?


--  作者:狐狸爸爸
--  发布时间:2011/7/11 9:09:00
--  
你到底是要更改父表的时候, 子表联动,还是更改子表的时候,父表联动?
--  作者:Tommy
--  发布时间:2011/7/11 9:22:00
--  

更改父表的时候,子表联动!

这个联动我通过关联的时候勾选了同步更新关联列做出来,但是父表里的其它数据带不出到子表,我用的不是表达式列!

我是在子表的DataColChanged事件里写代码来获取父表的数据带到子表里。。


--  作者:狐狸爸爸
--  发布时间:2011/7/11 9:30:00
--  

在表A的DataColChanged加入代码:

 

if e.DataCol.Name = "ID"  Then

    For each dr as datarow in e.DataRow.GetChildRows("表B")

         dr("Remark") = e.Datarow("Remark")

    next

end if

 


--  作者:Tommy
--  发布时间:2011/7/11 11:51:00
--  

已解决!

不过总体来说这个解决方法不够合理,主表关联列数据修改时,子表的DataColChanged事件代码执行变得毫无意义,却又不能删除,影响运行速度。