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


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

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

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
startedit事件代码的问题(独占式编辑OK)  发帖心情 Post By:2014/2/18 12:33:00 [显示全部帖子]

在表的startedit事件中写了代码想实现独占式的编辑,但发现一问题,代码只对普通输入或者下拉列表项目,下拉窗口等起作用,
而对于表单元格中设置了cellbutton按钮的没有作用,即点击单元格中的cellbutton按钮弹出另外一个窗口时startedit中的代码并不执行,是什么原因?如何解决?谢谢!

[此贴子已经被作者于2014-7-1 12:27:44编辑过]

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2014/2/18 12:44:00 [显示全部帖子]

谢谢,那 CellButtonClick事件 代码 如果写在全局事件中 是否能实现所有表都起作用?如果不行,要每个表中去写,工作量就太大了。
[此贴子已经被作者于2014-2-18 12:46:27编辑过]

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2014/2/18 12:49:00 [显示全部帖子]

但是表中的 CellButtonClick事件执行时机是比全局代码中的 CellButtonClick代码先执行,所以会不起作用吧。

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2014/7/1 10:24:00 [显示全部帖子]

除了将所有表中的cellbuttonClick都移动到全局表事件外还有没有其他办法,因为表有近百个,而且每个表中都有不同的cellbuttonClick事件,工作量太大而且每个表都移过去,那样全局代码会太长了。谢谢

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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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中再显示有人正在编辑吗?



 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


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

明白了,谢谢。

 回到顶部