以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]代码生成的列数据没能触发datacolchanged事件  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=131272)

--  作者:天一生水
--  发布时间:2019/2/21 19:54:00
--  [求助]代码生成的列数据没能触发datacolchanged事件
老师好!
如图测试:剪切单元格内容,再粘贴回原处。
"合并审理","开庭日期"两列发生变化,但是数据表的datacolchanged事件没有运行,需要重置"开庭日期"列以后,“测试表”才能新增行。
里面有一段屏蔽代码systemready = False,这怎样解决?
谢谢!



datacolchanged事件:
Select Case e.DataCol.name         \'写入测试表
    Case "合并审理","开庭日期"
        If e.DataCol.Name = "开庭日期" And e.NewValue IsNot Nothing Then
            \'If e.NewValue IsNot Nothing Then
            Dim dr = DataTables("测试").Find("[案号] = \'" & e.DataRow("案号") & "\'and [开庭日期] = \'" & e.DataRow("开庭日期") & "\'")
            If dr Is Nothing Then
                dr = DataTables("测试").AddNew
                dr("案号") = e.DataRow("案号")
            End If
            dr("案件数量") = e.DataRow("案件数量")
        Else
            Return
        End If
End Select


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片.jpg
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:ok测试日期列.table



[此贴子已经被作者于2019/2/21 20:17:45编辑过]

--  作者:有点蓝
--  发布时间:2019/2/21 21:02:00
--  
Select Case e.DataCol.name         \'写入测试表
    Case "合并审理","开庭日期"
        If e.DataRow.isnull("合并审理") = False And e.DataRow.isnull("开庭日期") = False Then
            \'If e.NewValue IsNot Nothing Then
            Dim dr = DataTables("测试").Find("[案号] = \'" & e.DataRow("案号") & "\'and [开庭日期] = \'" & e.DataRow("开庭日期") & "\'")
            If dr Is Nothing Then
                dr = DataTables("测试").AddNew
                dr("案号") = e.DataRow("案号")
            End If
            dr("案件数量") = e.DataRow("案件数量")
        End If
End Select

--  作者:天一生水
--  发布时间:2019/2/22 11:38:00
--  

蓝老师好!

但是只增加了一行,应该增加4行才对。

是什么原因?


--  作者:天一生水
--  发布时间:2019/2/24 22:05:00
--  
甜老师好!
非常感谢老师的帮助,如果有时间再帮我看看这个实例吧。
数据表的datacolchanged事件没有运行,是不是那一段屏蔽代码造成的,怎样解决?

--  作者:有点甜
--  发布时间:2019/2/24 22:20:00
--  

 

systemready = false 会导致所有事件都会触发的。你可以移除。

 

或者是,在代码最后,重置对应的行。

 

 


--  作者:天一生水
--  发布时间:2019/5/28 17:03:00
--  

甜老师好!

怎样在表事件里"......重置对应的行。"?


--  作者:有点甜
--  发布时间:2019/5/28 17:14:00
--  
以下是引用天一生水在2019/5/28 17:03:00的发言:

甜老师好!

怎样在表事件里"......重置对应的行。"?

 

请具体说明你的逻辑。在什么表事件,要重置什么行?


--  作者:有点甜
--  发布时间:2019/5/28 17:15:00
--  

如果需要重置datacolchanged,参考

 

http://www.foxtable.com/webhelp/scr/1587.htm

 


--  作者:天一生水
--  发布时间:2019/5/29 10:33:00
--  

甜老师好!我写了两处的事件代码,都没有运行完全,只能写入“测试表”一行数据。

但是,点击菜单按钮-重置列,就没有问题,可以写入四行数据。

  

1、DataColChanged事件:

......
Select Case e.DataCol.name         \'写入测试表
    Case "合并审理","开庭日期"
        If e.DataRow.isnull("合并审理") = False And e.DataRow.isnull("开庭日期") = False Then
            \'If e.NewValue IsNot Nothing Then
            Dim dr = DataTables("测试").Find("[案号] = \'" & e.DataRow("案号") & "\'and [开庭日期] = \'" & e.DataRow("开庭日期") & "\'")
            If dr Is Nothing Then
                dr = DataTables("测试").AddNew
                dr("案号") = e.DataRow("案号")
            End If
            dr("案件数量") = e.DataRow("案件数量")
            dr("开庭日期") = e.DataRow("开庭日期")
        End If
End Select

 

2、ValidateEdit事件:

DataTables("数据表").DataCols("合并审理").RaiseDataColChanged(e.Row("合并审理") <> e.Row.DataRow.OriginalValue("合并审理"))


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:ok测试日期列.table


--  作者:有点甜
--  发布时间:2019/5/29 10:38:00
--  

如果要重置全部行,参考
 
DataTables("数据表").DataCols("合并审理").RaiseDataColChanged()
 
如果要根据条件重置列,请select查询每一行数据,然后对比值

 

If dr("合并审理") <> dr.OriginalValue("合并审理") Then

    DataTables("数据表").DataCols("合并审理").RaiseDataColChanged(dr)

End If