以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  切换用户时有必填字段为空如何中止切换?(已解决)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=27729)

--  作者:zpx_2012
--  发布时间:2013/1/8 21:47:00
--  切换用户时有必填字段为空如何中止切换?(已解决)

各位老师,

 

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

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

 

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

 

谢谢!


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

--  作者:lin_hailun
--  发布时间:2013/1/9 13:17:00
--  
 试试,加入一句

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

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

--  作者:zpx_2012
--  发布时间:2013/1/10 9:50:00
--  

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

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

 

接其他代码.....

 

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


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

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

谢谢!



--  作者:lin_hailun
--  发布时间:2013/1/10 10:03:00
--  
 没有办法了,这样。

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

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

--  作者:zpx_2012
--  发布时间:2013/1/10 10:15:00
--  

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

 

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


--  作者:lin_hailun
--  发布时间:2013/1/10 10:28:00
--  
 呃,你做个例子吧。

--  作者:zpx_2012
--  发布时间:2013/1/10 11:37:00
--  

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

 

 

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

 

谢谢!


 

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

--  作者:blackzhu
--  发布时间: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编辑过]

--  作者:狐狸爸爸
--  发布时间:2013/1/10 13:18:00
--  
自己做个切换按钮,先检查是否有空,如果有空,给出提示,禁止切换,如果没有空,正常切换
--  作者:zpx_2012
--  发布时间: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