以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  撤销后,记录窗口中修改的内容未被还原  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=26854)

--  作者:jinruan
--  发布时间:2012/12/15 20:59:00
--  撤销后,记录窗口中修改的内容未被还原
取消(撤销)事件:
If (DataTables("销售订单").HasChanges = True) Or (DataTables("销售明细").HasChanges = True) Then
    Dim Result As DialogResult
    Result = MessageBox.Show("是否取消修改", "e.Form.name", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    If Result = DialogResult.Yes Then
        DataTables("销售订单").RejectChanges()
        DataTables("销售明细").RejectChanges()
    End If
End If


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

[此贴子已经被作者于2012-12-15 20:59:55编辑过]

--  作者:lin_hailun
--  发布时间:2012/12/15 21:50:00
--  
 去订单明细那里看看是否确实没有还原。再看看是这一行是修改状态还是已经保存的状态。

 如果是保持状态,可能是哪里写有保存的代码了。

--  作者:jinruan
--  发布时间:2012/12/16 11:46:00
--  
销售订单
销售明细
在外部表中都在撤销后还原为原值了,只是对应  销售订单 的这个记录窗口没有更新显示内容

--  作者:狐狸爸爸
--  发布时间:2012/12/17 8:17:00
--  

这应该是设计上的不足,以后给ReocrdGrid加一个Refresh方法,用于强制刷新数据。

另外你这种情况,自己设计窗口就行了,何必用多一个RecordGrid凑在一起呢?


--  作者:jinruan
--  发布时间:2012/12/17 9:24:00
--  
插入多个RecordGrid控件,全部绑定到一个表,给不同的RecordGrid控件设置不同的显示列,
这样比自己加控件绑定方便多了,以后要增加内容也不用再重排列控件,只调整下RecordGrid的列就行,工作量少很多啦
按您的思路,因为DataTables("销售订单")在始终是加载一条记录, 所以加了:DataTables("销售订单").Load 重新刷新下数据后可以了
If (DataTables("销售订单").HasChanges = True) Or (DataTables("销售明细").HasChanges = True) Then
    Dim Result As DialogResult
    Result = MessageBox.Show("是否取消修改", "e.Form.name", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    If Result = DialogResult.Yes Then
        DataTables("销售订单").RejectChanges()
        DataTables("销售明细").RejectChanges()
        DataTables("销售订单").Load
    End If
End If

[此贴子已经被作者于2012-12-17 9:24:28编辑过]

--  作者:lin_hailun
--  发布时间:2012/12/17 9:37:00
--  
 应该使用记录窗口的 Refresh方法。

 重新Load表的话,代价太大。

--  作者:jinruan
--  发布时间:2012/12/17 10:09:00
--  
在帮助中找到:记录窗口的 Build 方法,也可以正常显示,此方法可行吗
If (DataTables("销售订单").HasChanges = True) Or (DataTables("销售明细").HasChanges = True) Then
    Dim Result As DialogResult
    Result = MessageBox.Show("是否取消修改", "e.Form.name", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    If Result = DialogResult.Yes Then
        DataTables("销售订单").RejectChanges()
        DataTables("销售明细").RejectChanges()
        \'DataTables("销售订单").Load        
        Dim rgd As WinForm.RecordGrid = e.Form.Controls("RecordGrid3")
        \'rgd.Table = Tables("员工")
        \'rgd.Columns = "编号|姓名|部门|职务|性别|尊称|出生日期|地址|家庭电话|办公电话"
        rgd.Build()          
    End If
End If

--  作者:lin_hailun
--  发布时间:2012/12/17 10:21:00
--  
 可行。
--  作者:jinruan
--  发布时间:2012/12/17 10:37:00
--  

使用遍历,全部重建了记录窗口,测试通过

If (DataTables("销售订单").HasChanges = True) Or (DataTables("销售明细").HasChanges = True) Then

    Dim Result As DialogResult

    Result = MessageBox.Show("是否取消修改", "e.Form.name", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

    If Result = DialogResult.Yes Then

        DataTables("销售订单").RejectChanges()

        DataTables("销售明细").RejectChanges()

        \'DataTables("销售订单").Load  \'重载数据

        \'\'  Dim rgd As WinForm.RecordGrid = e.Form.Controls("RecordGrid3") \'逐个记录窗口重建立

        \'\'  rgd.Build

        For Each c As WinForm.Control In e.Form.Controls \'遍历重建所有记录窗口

            If Typeof c Is WinForm.RecordGrid Then \'判断控件是否是记录窗口

                Dim rgd As WinForm.RecordGrid = c \'使用特定类型的变量引用控件

                rgd.Build()

            End If

        Next

    End If

End If