热度不够啊,来个标题党吧.
经过bin版和俺准女婿甜版的大力指导.对于狐爸独占式编辑作如下改良.
1.解决了在表格编辑模式(相对于窗口录入方式,即原例子1)时,对某行未作任何修改,立即选择另一行时,该行仍然被锁定,不能被别人编辑的问题.大大占用资源哪.
2.解决了上述情况时行状态发生了变化,即使未作任何修改,也会引起行状态变化(由于编辑者列发生了变化),如果保存该行的话,而又设置了代码,记录保存人和保存时间的话,会造成多余的记录,即未修改任何东西,却记录了修改时间和修改人员.
代码原理很简单.就不多说了.
'--------改良独占式编辑
If e.OldRange.RowSel <> e.NewRange.RowSel '如果选择的是不同的行
If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then '而且原来选择的是一个有效的数据行
Dim r As Row = e.Table.Rows(e.OldRange.Rowsel) '获得原来选择的行
Dim i As Integer = 0
For Each c As Col In e.Table.Cols
If r.DataRow.OriginalValue(c.name) <> r(c.name) AndAlso c.name<>"编辑者" AndAlso c.name<>"执行次数" Then '不检查编辑者列和表达式列
i = i+1
End If
Next
If i = 0 Then
r.reject '恢复行状态
Dim cmd1 As New SQLCommand
cmd1.CommandText = "Select 编辑者 From {任务追踪表} Where [_Identify] = " & r.DataRow("_Identify")
Dim nm As String = cmd1.ExecuteScalar
If nm = user.name Then
If r.DataRow.RowState = DataRowState.Added Then '如果是新增行
r.DataRow("编辑者") = Nothing
Else
Dim cmd As New SQLCommand
cmd.CommandText = "Update {任务追踪表} Set 编辑者 = Null Where [_Identify] = " & r.DataRow("_Identify")
If cmd.ExecuteNonQuery = 1 Then
r.DataRow("编辑者") = Nothing
End If
End If
End If
End If
End If
End If
忘了说了,代码加在beforeselchange 事件中,选择不同行时候执行判断。
[此贴子已经被作者于2014-4-17 7:50:25编辑过]