以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 窗口中动态生成的表自动引用的数据同步更新 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=185879) |
-- 作者:采菊东篱下 -- 发布时间:2023/3/22 18:41:00 -- 窗口中动态生成的表自动引用的数据同步更新 窗口中基本信息是Normal类型,窗口中棋赛名称管理是动态生成的表, 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中写入: 依然无效。
|
-- 作者:采菊东篱下 -- 发布时间:2023/3/23 21:09:00 -- If Forms("主窗口").opened And Forms("主窗口").ExistControl("Table棋赛名称管理") Then DataTables("Table棋赛名称管理").GlobalHandler.DataColChanged = True End If 这样写也无效。
|