Foxtable(狐表)用户栏目专家坐堂 → 切换用户时有必填字段为空如何中止切换?(已解决)


  共有9479人关注过本帖树形打印复制链接

主题:切换用户时有必填字段为空如何中止切换?(已解决)

帅哥哟,离线,有人找我吗?
zpx_2012
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
切换用户时有必填字段为空如何中止切换?(已解决)  发帖心情 Post By:2013/1/8 21:47:00 [只看该作者]

各位老师,

 

我在BeforeSaveDataRow用了代码如果有必填项目为空的话禁止保存,并且自动定位到为空的地方,关闭项目时也会提示,但现在问题是切换用户时我在最前面加了保存项目的代码,就是想说切换前先检查是否有必填字段没填就中止。

'切换前先保存
Syscmd.Project.Save()

 

但当点切换按钮时提示有为空的项目,确定后却不会再自动跳到为空处等待处理,而是直接运行下面的代码去了。除了把BeforeSaveDataRow整个代码复制到切换按钮处以外,还有什么其他办法可以实现切换前为空的话必须先处理才能切换?

 

谢谢!


[此贴子已经被作者于2013-1-10 14:52:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lin_hailun
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/9 13:17:00 [只看该作者]

 试试,加入一句

Syscmd.Project.Save()
Application.DoEvents()

......不行的话,就不行了。

 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/1/10 9:50:00 [只看该作者]

谢谢老师,但是加了那句也不可以,如果改成

For Each dt As DataTable In DataTables
    dt.Save()
Next

 

接其他代码.....

 

可以自动定位到为空的表单及字段,但是一按确定按钮又继续往下了,


此主题相关图片如下:360截图20130110094855389.jpg
按此在新窗口浏览图片

再请教大家还有没有其他办法定位到为空的那里继续编辑,中止切换?

谢谢!



 回到顶部
帅哥哟,离线,有人找我吗?
lin_hailun
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/10 10:03:00 [只看该作者]

 没有办法了,这样。

 要么,用一个全局变量标志是切换时的保存,然后在保存的地方做一个判断。

 要么,把保存的代码写成内部函数,这样就可以灵活调用和控制了。

 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/1/10 10:15:00 [只看该作者]

“要么,用一个全局变量标志是切换时的保存,然后在保存的地方做一个判断。”

 

这个能说的详细点吗,谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
lin_hailun
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/10 10:28:00 [只看该作者]

 呃,你做个例子吧。

 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/1/10 11:37:00 [只看该作者]

好的,做了个简单的例子,随便在产品编码上增加一行,然后按配置栏上的“切换用户”按钮,如果产品编码有空时就必须先去处理,切换按钮下面的代码就不能运行即窗口1不会打开。

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:为空验证.foxdb

 

谢谢!


 

[此贴子已经被作者于2013-1-10 13:53:22编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57596 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/1/10 13:15:00 [只看该作者]

把保存按钮离得代码取出来 放在必须判断保存的按钮中去.


Dim s() As String ={"分类","任务"}
For Each dr As DataRow In DataTables("表A").DataRows
    For i As Integer = 0 To s.Length-1
        If dr.IsNull(s(i)) Then
            MessageBox.Show(s(i) & "不能为空")
            Dim wz As Integer = Tables("表A").FindRow(dr)
            If wz >= 0 Then
                Tables("表A").Position = wz
            End If
            Return
        Else
            Forms("用户登录").Open
        End If
    Next
Next

 试试这样?
[此贴子已经被作者于2013-1-10 13:18:03编辑过]

 回到顶部
帅哥,在线噢!
狐狸爸爸
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/1/10 13:18:00 [只看该作者]

自己做个切换按钮,先检查是否有空,如果有空,给出提示,禁止切换,如果没有空,正常切换

 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2013/1/10 13:47:00 [只看该作者]

关键是不知道怎么禁止切换?

因为我的保存前验证的代码是在全局表事件中通用的,有e参数,在保存时不管是主表,明细表或关联表都可以自动定位到为空的表及具体行中,

 

如果到切换按钮中来判断因为没有e参数,就不知道怎么自动定位到为空的那张表了,如果把e.datatable换成Currenttable则代码中到处都提示出错了,很多e参数的地方都不知道要怎么修改才可以。

 

下面是全局代码中的代码:请问大家要怎么正确的用到切换代码当中?

 

'集合系统表中所有有必填字段的表
Dim tbs As String
tbs = DataTables("系统表").GetComboListString("表名","必填字段 is not Null ")
If tbs > "" Then
    '保存前检查不为空的列是否为空
    If tbs.contains(e.DataTable.Name)  Then
        Dim dr As DataRow = DataTables("系统表").Find("表名 = '" & e.DataTable.Name & "'")
        Dim s As String = dr("必填字段")
        Dim ss() As String = s.split("\")
        For i As Integer = 0 To ss.Length - 1
            If e.DataRow.IsNull(ss(i)) Then
                MessageBox.Show("'" & e.DataTable.Name & "'的" & "'" & ss(i) & "列'不能为空!")
                If e.DataTable.name Like "*明细" Then
                    For Each re As Relation In Relations
                        If e.DataTable.Name = re.ChildTable.Name Then  '如果是明细表
                            Dim tbname As String = re.ParentTable.Name & "." & re.ChildTable.Name '得到关联表
                            MainTable = Tables(re.ParentTable.Name)
                            '定位到为空行的父行
                            Tables(MainTable.Name).Position = Tables(MainTable.Name).Findrow(e.DataRow.getparentrow(re.ParentTable.Name))
                            Tables(tbname).Position = Tables(tbname).FindRow(e.DataRow) '定位到为空行的行
                            e.Cancel = True
                            Return
                            Exit For
                        End If
                    Next
                Else
                    Tables(e.DataTable.Name).Position = Tables(e.DataTable.Name).FindRow(e.DataRow)
                    MainTable = Tables(e.DataTable.Name)
                    e.Cancel = True
                   Exit For
                End If
             End If
        Next
    End If
End If


 回到顶部
总数 15 1 2 下一页