以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 如何实现撤消已保存、多行修改的记录 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=185862) |
|
-- 作者:lin98 -- 发布时间:2023/3/21 20:25:00 -- 如何实现撤消已保存、多行修改的记录 Tables("入库主表").Current.DataRow.Load(False) Tables("入库明细").Current.DataRow.Load(False) 上面代码,只对当前选中修改,未保存的记录进行撤消修改 如何实现对多行修改已保存的记录进行撤消修改?
|
|
-- 作者:有点蓝 -- 发布时间:2023/3/21 20:32:00 -- 如果不是整表撤销,只能是遍历逐行处理 |
|
-- 作者:lin98 -- 发布时间:2023/3/21 20:49:00 -- 不是整表撤销,1楼的代码只对未保存的记录,对已保存的数据是无效,如何实现对已保存也有效,同时更新到外部数据源,确保一致? |
|
-- 作者:有点蓝 -- 发布时间:2023/3/21 21:12:00 -- 已保存的数据是没有办法撤销的 |
|
-- 作者:lin98 -- 发布时间:2023/3/22 9:33:00 -- 撤销修改 方法一:Tables("入库主表").Current.DataRow.Load(False) 方法二:
With Tables("员工") If .Current IsNot Nothing Then .Current.Reject() End If End With 这二种方法,都是必须光标在修改行,撤销修改才有效,对多行记录,光标不在修改行是撤销修改无效。 问题一:如何实现多行记录,光标不在修改行撤销修改有效? 问题二:二种方法,哪种对外部数据源同步更好?试一下,好象差不多,这二种写法的区别是什么?
|
|
-- 作者:有点蓝 -- 发布时间:2023/3/22 9:43:00 -- 1、遍历:http://www.foxtable.com/webhelp/topics/1438.htm 2、方法1可以重新加载数据,方法2只是撤销修改,不会重新加载
|
|
-- 作者:lin98 -- 发布时间:2023/3/22 12:24:00 -- With Tables("员工") If .Current IsNot Nothing Then .Current.Reject() End If End With 这个之前测试一下是可以撤销修改,现在再测试变成删除记录,这个什么情况
|
|
-- 作者:cd_tdh -- 发布时间:2023/3/22 13:31:00 -- 你这个代码就是当前行啊 要不用系统的撤销命令哟Syscmd.Edit.Undo()
[此贴子已经被作者于2023/3/22 13:33:17编辑过]
|
|
-- 作者:有点蓝 -- 发布时间:2023/3/22 13:35:00 -- 以下是引用lin98在2023/3/22 12:24:00的发言:
如果是新增行还没有保存过,撤销当然是连新增这个动作也撤销了
With Tables("员工") If .Current IsNot Nothing Then .Current.Reject() End If End With 这个之前测试一下是可以撤销修改,现在再测试变成删除记录,这个什么情况
|
|
-- 作者:lin98 -- 发布时间:2023/3/22 14:47:00 -- 模拟关联-入库主表和明细--执行-增、删除都正常 问题一:主表录入后,明细表没录入,修改主表,执行下面,无报错,无反应,有时,只有录入明细才有反应,再保存,保存事件失效,按保存无反应 Tables("入库主表").Current.DataRow.Load(False)问题2:修改明细,执行下面,无报错,无反应,有时,删除记录 For Each r As Row In Tables("入库明细").Rows r.DataRow.Load(False) Next 下面保存 Dim dr As DataRow = Tables("入库主表").current.DataRow Dim pf As String If dr.RowState <> DataRowState.Added Then Return ElseIf dr.IsNull("制单日期") Then e.Cancel = True MessageBox.Show("必须输入日期!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) Return Else pf = "RK" & "" & Format(dr("制单日期"),"yyyyMM") End If Dim cmd1 As New SQCommand Dim cmd2 As New SQCommand Dim Key As Integer cmd1.C \'设置数据源名称 cmd2.C cmd1.commandText = "Sel Count(*) From [编号] Where [前缀] = \'" & pf & "\'" If cmd1.ExecuteScalar = 0 Then cmd1.commandtext = "Insert Into 编号 (前缀, 顺序号) Values(\'" & pf & "\',1)" cmd1.ExecuteNonQuery End If cmd1.commandText = "Sel [顺序号] From [编号] Where [前缀] = \'" & pf & "\'" Do Key = cmd1.ExecuteScalar() cmd2.commandText = "Update [编号] Se [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = \'" & pf & "\'" If cmd2.ExecuteNonQuery() > 0 Then Exit Do End If Loop dr("入库单号") = pf & "-" & Format(Key,"0000") \'流水号的设计) Dim r As Row = Tables("入库主表").current r("保存状态") = True DataTables("入库主表").Save() DataTables("入库明细").Save() MessageBox.Show("保存成功!") 如果是新增行还没有保存过,撤销当然是连新增这个动作也撤销了,
把我整不会 需求,("保存状态") = True,可以实现未保存的主表或明细的修改的撤销,这个怎么实现? |