以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  窗口中动态生成的表自动引用的数据同步更新  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=185879)

--  作者:采菊东篱下
--  发布时间:2023/3/22 18:41:00
--  窗口中动态生成的表自动引用的数据同步更新
窗口中基本信息是Normal类型,窗口中棋赛名称管理是动态生成的表,

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20230322181905.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20230322181944.png
图片点击可在新窗口打开查看
e.DataRow.Save
Select Case e.DataCol.Name
    Case "棋赛名称", "棋赛副名"
        Dim Filter As String
        If e.DataCol.Name = "棋赛名称" Then
            Filter = "[棋赛名称] = \'" & e.OldValue & "\' And [棋赛副名] = \'" & e.DataRow("棋赛副名") & "\'" 
        Else
            Filter = "[棋赛名称] = \'" & e.DataRow("棋赛名称") & "\' And [棋赛副名] = \'" & e.OldValue & "\'"
        End If
        Dim drs As List(Of DataRow) = DataTables("基本信息").SQLSelect(Filter)
        If drs IsNot Nothing Then
            For Each dr As DataRow In drs
                dr(e.DataCol.Name) = e.NewValue
                dr.Save()
            Next
        End If
        With DataTables("基本信息")
            .LoadPage = 0 \'加载第一页
            .LoadTop = 20 \'每页5行
            .loadover = "_Identify"
            .LoadReverse = True
            .Load()
        End With
End Select
    这段代码在后台数据表中修改棋赛名称管理数据,基本信息表上的数据能实现同步自动引用更新,把上面的代码在全局DataColChanged表事件中改为如下,在窗口中修改棋赛名称管理上的数据,窗口中的基本信息数据没同步自动更新
If Forms("主窗口").opened And Forms("主窗口").ExistControl("Table棋赛名称管理") Then
    If e.DataTable.Name = "Table棋赛名称管理" Then
        e.DataRow.Save
        Select Case e.DataCol.Name
            Case "棋赛名称", "棋赛副名"
                Dim Filter As String
                If e.DataCol.Name = "棋赛名称" Then
                    Filter = "[棋赛名称] = \'" & e.OldValue & "\' And [棋赛副名] = \'" & e.DataRow("棋赛副名") & "\'"
                Else
                    Filter = "[棋赛名称] = \'" & e.DataRow("棋赛名称") & "\' And [棋赛副名] = \'" & e.OldValue & "\'"
                End If 
                Dim drs As List(Of DataRow) = DataTables("基本信息").SQLSelect(Filter)
                If drs IsNot Nothing Then
                    For Each dr As DataRow In drs
                        dr(e.DataCol.Name) = e.NewValue
                        dr.Save()
                    Next
                End If
                With DataTables("基本信息")
                    .LoadPage = 0 \'加载第一页
                    .LoadTop = 20 \'每页5行
                    .loadover = "_Identify"
                    .LoadReverse = True
                    .Load()
                End With
                With DataTables("主窗口_Table2")
                    .LoadPage = 0 \'加载第一页
                    .LoadTop = 20 \'每页5行
                    .loadover = "_Identify"
                    .LoadReverse = True
                    .Load()
                    Forms("主窗口").Controls("TextBox3").Value = 1 & "/" & .TotalPages
                End With
        End Select
    End If
End If
[此贴子已经被作者于2023/3/22 20:51:32编辑过]

--  作者:有点蓝
--  发布时间:2023/3/23 8:39:00
--  
调试
        If e.DataCol.Name = "棋赛名称" Then
            Filter = "[棋赛名称] = \'" & e.OldValue & "\' And [棋赛副名] = \'" & e.DataRow("棋赛副名") & "\'" 
        Else
            Filter = "[棋赛名称] = \'" & e.DataRow("棋赛名称") & "\' And [棋赛副名] = \'" & e.OldValue & "\'"
        End If
msgbox(Filter )
        Dim drs As List(Of DataRow) = DataTables("基本信息").SQLSelect(Filter)
msgbox(drs.count)

--  作者:采菊东篱下
--  发布时间:2023/3/23 16:59:00
--  
在窗口中修改棋赛名称管理上的数据基本信息表没任何反应,改为MessageBox.show(Filter)也没弹窗。为什么数据表上行,在窗口上不行?
--  作者:有点蓝
--  发布时间:2023/3/23 17:12:00
--  
调试
msgbox(Forms("主窗口").opened)
msgbox(Forms("主窗口").ExistControl("Table棋赛名称管理"))
If Forms("主窗口").opened And Forms("主窗口").ExistControl("Table棋赛名称管理") Then
msgbox(e.DataTable.Name)
    If e.DataTable.Name = "Table棋赛名称管理" Then
        e.DataRow.Save
        Select Case e.DataCol.Name
            Case "棋赛名称", "棋赛副名"
                Dim Filter As String

--  作者:采菊东篱下
--  发布时间:2023/3/23 17:46:00
--  
改为MessageBox.show(Forms("主窗口").opened)
MessageBox.show(Forms("主窗口").ExistControl("Table棋赛名称管理"))
全没弹窗
[此贴子已经被作者于2023/3/23 17:46:13编辑过]

--  作者:有点蓝
--  发布时间:2023/3/23 20:05:00
--  
说明事件根本没有触发,可能原因
1、这"棋赛名称", "棋赛副名"2个是表达式列
2、代码没有放对地方
3、窗口表如果是动态绑定的,请使用全局表事件

--  作者:采菊东篱下
--  发布时间:2023/3/23 20:18:00
--  
1、这"棋赛名称", "棋赛副名"2个是表达式列,不是表达式
2、代码没有放对地方
3、窗口表如果是动态绑定的,请使用全局表事件,代码是写在全局表事件的DataColChanged
[此贴子已经被作者于2023/3/23 20:17:47编辑过]

--  作者:有点蓝
--  发布时间:2023/3/23 20:22:00
--  
没有启用全局表事件
--  作者:采菊东篱下
--  发布时间:2023/3/23 20:59:00
--  

在项目事件Initialize中写入:

DataTables("基本信息").GlobalHandler.DataColChanged = True
依然无效。

--  作者:采菊东篱下
--  发布时间:2023/3/23 21:09:00
--  
If Forms("主窗口").opened And Forms("主窗口").ExistControl("Table棋赛名称管理") Then
    DataTables("Table棋赛名称管理").GlobalHandler.DataColChanged = True
End If
这样写也无效。