以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于DataColChange事件引发的一点疑问  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=94005)

--  作者:zhy400137
--  发布时间:2016/12/13 9:56:00
--  关于DataColChange事件引发的一点疑问
Select Case e.DataCol.name
    Case "产品编号"
        Dim dr As DataRow = DataTables("库存").Find("产品编号 = \'" & e.OldValue & "\'")
        
If dr Is Nothing Then 
            dr = DataTables(
"
库存").AddNew()
            dr(
"
产品编号") = e.DataRow("产品编号")
            dr(
"
产品名称") = e.DataRow("产品名称")
            dr(
"
产品规格") = e.DataRow("产品规格")
        Else
            dr(
"
产品编号") = e.DataRow("产品编号")
        End If
    Case 
"
产品名称","产品规格"
        Dim dr As DataRow = DataTables(
"
库存").Find("产品编号 = \'" & e.DataRow("产品编号") & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        
End If
End
 Select
以上是帮助中关于非关联表联动的一段内容,但是否少写了主表行和子表行要SAVE的代码,不然是否会存在
主表改后,没保存但库存表的内容已变化,导致的数据不一致,此时是否要
dr.save
e.datarow.save

--  作者:zhy400137
--  发布时间:2016/12/13 10:08:00
--  
由此我还有一个困扰很久的疑问,窗口表中加载数据 代码Datatables("表").load()中的False参数是要好还是不要好,
1、不要的情况:Load()
表中输入的数据,我没有点保存按钮,但重新打开窗口,没有保存的数据仍然存在,这样如果此行的要验证非空的数据,
即有些数据不输入不允许保存的时候,就有点矛盾。


2、要的情况:Load(False)
如果存在 在DataColChanged事件中进行两表联动,主表更改数据,子表也同时更改,但主表因某种原因没保存,子表在DataColChanged
中做了SAVE,那两表会出现不一致的情况。

--  作者:有点蓝
--  发布时间:2016/12/13 10:11:00
--  
这个是操作逻辑的问题了,理论上当然都要保存数据的。

至于是不是要自动保存根据自己的需要了,加上这2句代码就变成了自动保存,有些人可能不喜欢这样。

--  作者:zhy400137
--  发布时间:2016/12/13 10:34:00
--  
那如果不自动保存的话,是否要在主表的保存按钮中,写入主子表同时保存的代码?就是要
Datatables("主表").save
Datatables("子表").save

?

--  作者:有点蓝
--  发布时间:2016/12/13 10:55:00
--  
既然要父子表进行同步,当然要同时保存。

逻辑都是自己控制的,既然之前的逻辑不符合要求,那就改为符合自己要求的用法。

既然要加载,当然要考虑修改的数据应该什么处理,做了一半,不想丢掉,那就只能暂停加载,等编辑完毕保存了再说。不然就全部回滚之前的更改。都是要靠自己的代码来控制的

--  作者:zhy400137
--  发布时间:2016/12/13 13:22:00
--  
我自己再体会下,谢谢!