Foxtable(狐表)用户栏目专家坐堂 → 窗口中动态生成的表自动引用的数据同步更新


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

主题:窗口中动态生成的表自动引用的数据同步更新

美女呀,离线,留言给我吧!
采菊东篱下
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
窗口中动态生成的表自动引用的数据同步更新  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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)

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2023/3/23 16:59:00 [只看该作者]

在窗口中修改棋赛名称管理上的数据基本信息表没任何反应,改为MessageBox.show(Filter)也没弹窗。为什么数据表上行,在窗口上不行?

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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2023/3/23 17:46:00 [只看该作者]

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

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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/3/23 20:05:00 [只看该作者]

说明事件根本没有触发,可能原因
1、这"棋赛名称", "棋赛副名"2个是表达式列
2、代码没有放对地方
3、窗口表如果是动态绑定的,请使用全局表事件

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2023/3/23 20:18:00 [只看该作者]

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

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


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/3/23 20:22:00 [只看该作者]

没有启用全局表事件

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2023/3/23 20:59:00 [只看该作者]

在项目事件Initialize中写入:

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

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2023/3/23 21:09:00 [只看该作者]

If Forms("主窗口").opened And Forms("主窗口").ExistControl("Table棋赛名称管理") Then
    DataTables("Table棋赛名称管理").GlobalHandler.DataColChanged = True
End If
这样写也无效。

 回到顶部
总数 34 1 2 3 4 下一页