以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  请教老师,如何设计未保存提示?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=2228)

--  作者:菜鸟foxtable
--  发布时间:2009/3/29 10:04:00
--  请教老师,如何设计未保存提示?
独立窗口有一关联表控件,另有保存和退出按钮....

保存按钮代码为:DataTables("某表").Save()

退出按钮代码为:e.form.Close()

如何设计当前关联表修改后未点击保存按钮时,点击退出按钮出现图二所示提示?


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

图片点击可在新窗口打开查看此主题相关图片如下:002.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2009-3-29 14:29:04编辑过]

--  作者:czy
--  发布时间:2009/3/29 12:11:00
--  
If DataTables("某表").HasChanges Then
    Dim Meb As DialogResult
    MessageBox.Show("某表已经被修改,是否保存?", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
    Select Case Meb
    Case DialogResult.Yes
        DataTables("某表").Save()
        e.form.Close()
    Case DialogResult.No
        e.form.Close()
    End Select
End If

--  作者:czy
--  发布时间:2009/3/29 13:38:00
--  
不好意思,楼上代码漏了最关键的,未对Meb变量赋值。

If DataTables("某表").HasChanges Then
    Dim Meb As DialogResult
    Meb = MessageBox.Show("某表已经被修改,是否保存?", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
    if  Meb = DialogResult.Yes Then
        DataTables("某表").Save()
        e.form.Close()
    Elseif  Meb = DialogResult.No Then
        e.form.Close()
    End If
Else
    e.form.Close()
End If
[此贴子已经被作者于2009-3-29 13:39:19编辑过]

--  作者:菜鸟foxtable
--  发布时间:2009/3/29 14:22:00
--  

......关键字HasChanges图片点击可在新窗口打开查看

问题好象还在啊.点击否,窗口关闭,再打开,刚才新增输入的项目依然保存了.....

窗口AfterLoad和BeforeClose事件都有同样代码DataTables("某表").Load()

某表为SQL外部表.

[此贴子已经被作者于2009-3-29 14:38:56编辑过]

--  作者:czy
--  发布时间:2009/3/29 15:29:00
--  
这个应该比较难办吧。
假如你不是关闭窗口,而是判断是否进行过修改,然后关闭项目就容易办。
无论根据判断是否关闭窗口,此时的修改过的值都真真切切的存在于表中,只要你以后执行保存,修改过的数据都会进行保存。
从你的个表述看,最好的办法是当选择否后,判断CanUndo是否有撤消的信息,直至全部撤消。
[此贴子已经被作者于2009-3-29 15:31:34编辑过]

--  作者:菜鸟foxtable
--  发布时间:2009/3/29 15:35:00
--  

全部取消重做这个不太好办.如何判断只取消当前表?假如还有其他表未保存呢?图片点击可在新窗口打开查看

看来得找老爹了..


--  作者:czy
--  发布时间:2009/3/29 15:38:00
--  
CanUndo是判断指定表的。
只是帮助中没有这样的示例,偶不会代码。
--  作者:czy
--  发布时间:2009/3/29 15:41:00
--  
借你的贴,我倒希望老六增加清除编辑标记的函数,这样更能灵活处理一些特殊的要求。
--  作者:czy
--  发布时间:2009/3/29 15:51:00
--  
Tables("表名").CanUndo
CanUndo能返回一个集合吗?如果能够返回问题就很好解决,否则只能挠头了。
--  作者:gdlgh
--  发布时间:2009/3/29 16:39:00
--  
试下这样?

Do While Tables("表名").CanUndo
    Syscmd.Edit.Undo()
Loop