以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 请教老师,如何设计未保存提示? (http://foxtable.net/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
|