以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 独占式编辑在普通表中如何运用? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=23180) |
||||
-- 作者:zpx_2012 -- 发布时间:2012/9/4 21:10:00 -- 独占式编辑在普通表中如何运用? 各位老师,
看了一下工作流中的独占式编辑方法二,此方法是用在双击时打开一个录入窗口录入的情况下,如下代码 Dim cmd As New
SQLCommand 如果没有使用弹出窗口录入数据,而只是在普通表中当鼠标进入某行单元格要输入内容时如何实现类似的功能? 代码要如何修改?
谢谢! |
||||
-- 作者:狐狸爸爸 -- 发布时间:2012/9/4 21:45:00 -- 不可以 |
||||
-- 作者:zpx_2012 -- 发布时间:2012/9/4 21:55:00 -- 谢谢狐爸,那很惨啊,你不是建议大家尽量不用窗口时就不要用,但其实系统中每一个表都会有独占式的要求啊, 那还有没有其他变通的方法(直接在表中录入或修改数据时),谢谢! |
||||
-- 作者:程兴刚 -- 发布时间:2012/9/5 1:39:00 -- 1、增加一个逻辑型标记列,PositionChanged进入该行前判断该列的值,如果该列的值为false,允许进入该行操作同时向该列写入值true,操作完成退出该行前向该列写入逻辑值false 2、如果判断该列的值为true,说明已经由用户在该列操作,用e.Cancel = True禁止进入该行操作并提示当前用户排队等候或进行其他与该行无关的操作;
这样理论上也应该可以完成独占式编辑的设计。
|
||||
-- 作者:zpx_2012 -- 发布时间:2012/9/5 7:12:00 -- 谢谢程版,真的很让人感动啊,快两点了还在回复,但能详细点吗?我在PositionChanged中用以下代码: 表中增加的逻辑列为“正在编辑” Dim r As Row = e.Table.Current("正在编辑")
但提示出错
明天有空时再帮我看看好吗? 谢谢! |
||||
-- 作者:狐狸爸爸 -- 发布时间:2012/9/5 8:19:00 -- 下次更新,在帮助文件增加一个这样的例子。 |
||||
-- 作者:程兴刚 -- 发布时间:2012/9/5 8:35:00 -- 由于PositionChanged中不能使用 e.Cancel,改用了禁止编辑列的做法,但比原来想象的更为灵活:
1、我用的内部表,正在编辑列打勾的行相当于其他用户正在编辑,大家可以改为外部表,多用户使用前,命令窗口清除正在编辑列的所有勾选; 2、当正在编辑时突然断电可能会导致该行不能再编辑,需要一个清除独占编辑的按钮,该按钮由您的超级管理员通过密码来操作;
|
||||
-- 作者:zpx_2012 -- 发布时间:2012/9/5 16:11:00 -- 谢谢程版 |
||||
-- 作者:hawkerwin -- 发布时间:2012/9/5 17:14:00 -- 增加一列 编辑人 StartEdit代码 : e.Table.Current.DataRow.Load If e.Row("编辑人")<>"" AndAlso e.Row("编辑人") <> User.Name MessageBox.Show("其他用户正在操作此订单,请稍后再进行操作","提示") End If BeforeSelChange代码: If e.OldRange.RowSel <> e.NewRange.RowSel If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then Dim r1 As Row = e.Table.Rows(e.OldRange.Rowsel) Dim r2 As Row = e.Table.Rows(e.NewRange.Rowsel) r1.DataRow.Load r2.DataRow.Load If r1.DataRow("编辑人")= User.Name Then r1.DataRow("编辑人")="" r1.Save End If If r2.DataRow("编辑人")="" Then r2.DataRow("编辑人")= User.Name r2.Save ElseIf r2.DataRow("编辑人")<>"" And r2.DataRow("编辑人")<>User.Name Then MessageBox.Show("其他用户已经在操作此订单,请稍后再操作","提示") End If End If End If |
||||
-- 作者:hawkerwin -- 发布时间:2012/9/5 17:16:00 -- BeforeCloseObject代码: For Each r As DataRow In DataTables("表明").DataRows If r("编辑人")=User.Name Then r("编辑人")="" End If Next |