Foxtable(狐表)用户栏目专家坐堂 → startedit事件代码的问题(独占式编辑OK)


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

主题:startedit事件代码的问题(独占式编辑OK)

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


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

因为独占式编辑有类似 MessageBox.show(nm & "正在编辑本单,请稍后再试!","提示")
这样的提示代码,帮助中不是说不能用在prepareEdit中吗,那样会死循环。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/1 11:16:00 [只看该作者]

以下是引用zpx_2012在2014-7-1 11:14:00的发言:
因为独占式编辑有类似 MessageBox.show(nm & "正在编辑本单,请稍后再试!","提示")
这样的提示代码,帮助中不是说不能用在prepareEdit中吗,那样会死循环。

 

如果麻烦,还不如自己做一个提示窗口呢。


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


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

不太明白,如果能在prepareEdit中判断当然比较方便了,自己做提示窗口就不会死循环,类似这样吗?
if forms("提示窗口").Opened = false then
    forms("提示窗口").Open
end if
然后在提示窗口的afterload中再显示有人正在编辑吗?



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/1 11:46:00 [只看该作者]

 回复13楼,测试了一下,不会死循环,因为可以判断是否已经打开。

 

 是的,在窗口显示对应信息即可。


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


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

但我测试为什么会死循环叱?prepare的代码如下:
If e.IsFocusCell Then
    '---独暂式编辑用,进入编辑状态时判断当前行是否有人编辑,没有则写入编辑者锁定当前行
    If e.Table.Name.StartsWith(Mtb & "_") Then '仅对有编辑者列的表
        Dim t As Table = e.Table
        '获取父行,父表名称
        Dim pr As DataRow
        If e.Table.Name = Mtb & "_主表"  Then
            pr = e.Row.DataRow
        Else
            pr = DataTables(Mtb & "_主表").Find(Rcol & "='" & e.Row(Rcol) & "'")
        End If
        If e.Row.DataRow.RowState = DataRowState.Added OrElse pr("sys_Editor") = MyName Then '如果是新增行
            Return
        End If
        '---将后台表中编辑者赋值成功后操作表中也同样标识上
        Dim cmd As New SQLCommand
        cmd.connectionName = Mydata
        Dim exp As String  = "sys_Editor Is Null And [_Identify] = " & pr("_Identify") & " And sys_Fbh = " & pr("sys_Fbh") '加入流程编号防止多人同时加载相同数据重复处理
        cmd.CommandText = "Update {" & Mtb & "} Set sys_Editor = '" & MyName & "' Where " & exp
        If cmd.ExecuteNonQuery = 1 Then
            pr("sys_Editor") = MyName  '将当前操作表编辑者也同样赋值
        Else
            cmd.CommandText = "Select sys_Editor From {" & Mtb & "} Where [_Identify] = " & pr("_Identify") & " And sys_Fbh = " & pr("sys_Fbh")
            Dim nm As String = cmd.ExecuteScalar
            If nm > "" Then
                If Forms("窗口1").Opened = False Then
                    Forms("窗口1").Open
                    'MessageBox.show(nm & "正在编辑本单,请稍后再试!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                End If
            Else
                If Forms("窗口1").Opened = False Then
                    Forms("窗口1").Open
                    'MessageBox.show("此行已经被其他用户优先处理了,请刷新或重新加载后再操作!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                End If
            End If
            e.Cancel = True '取消编辑
        End If
    End If
End If
弹出窗口1后一旦关闭它马上又打开窗口1了。除非先不要关闭它,移动到其他没有人编辑的行上再关闭就不会,但这样操作似乎也不符合常规啊
[此贴子已经被作者于2014-7-1 12:07:52编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/7/1 12:21:00 [只看该作者]

 回复15楼,被你绕弯了。

 

 为什么要在prepareEdit那里弹出提示?prepareEdit只是判断和限制是否允许被编辑 e.Cancel = true

 

  

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目13.table


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


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

明白了,谢谢。

 回到顶部
总数 17 上一页 1 2