我设计了这样一个独占式编辑窗口

此主题相关图片如下:未命名.jpg

当执行如下操作时,
点击修改-》保存或撤消-》修改-》保存或撤消
这个过程中,内容不做任何修改,
但是第一次点完保存或撤消按钮,后台的编辑者列并不能清空,第二次就可以清空,如此反复。
修改按钮代码如下:
Dim cmd As New SQLCommand
cmd.ConnectionName = _ConnectName
Dim exp As String = "(sys_locked Is Null Or sys_locked = '" & _UserName & "') And [_Identify] = " & Tables("t_yg").Current("_Identify")
cmd.CommandText = "Update {t_yg} Set sys_locked = '" & _UserName & "' Where " & exp
If cmd.ExecuteNonQuery = 1 Then
'编辑者更新成功,输入框有效化
此处省略
Else
cmd.CommandText = "Select sys_locked From {t_yg} Where [_Identify] = " & Tables("t_yg").Current("_Identify")
Dim nm As String = cmd.ExecuteScalar
If nm > "" Then
MessageBox.show(nm & "正在编辑此行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
Else
cmd.CommandText = "Select Count(*) From {t_yg} Where [_Identify] = " & Tables("t_yg").Current("_Identify")
If cmd.ExecuteScalar =0 Then
MessageBox.show("此行已被他人删除!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
End If
End If
End If
保存按钮代码:
Tables("t_yg").Current("sys_locked") = Nothing
Tables("t_yg").Current("lastedit") = _UserName
Tables("t_yg").Current.Save()
Tables("t_yg").Current.DataRow.Load()
撤消按钮代码如下:
Tables("t_yg").Current.Reject() '撤销编辑
Tables("t_yg").Current("sys_locked") = Nothing
Tables("t_yg").Current.Save()
DataTables("t_yg").Load
请帮忙看下是什么原因呢?
[此贴子已经被作者于2011-7-7 14:13:08编辑过]
If cmd.ExecuteNonQuery = 1 Then
Tables("t_yg").Current("sys_locked") = _UserName
DataTables("t_yg").BaseTable.AcceptChanges()
'编辑者更新成功,输入框有效化
'此处省略
Else
cmd.CommandText = "Select sys_locked From {t_yg} Where [_Identify] = " & Tables("t_yg").Current("_Identify")
Dim nm As String = cmd.ExecuteScalar
If nm > "" Then
MessageBox.show(nm & "正在编辑此行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
Else
cmd.CommandText = "Select Count(*) From {t_yg} Where [_Identify] = " & Tables("t_yg").Current("_Identify")
If cmd.ExecuteScalar =0 Then
MessageBox.show("此行已被他人删除!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
End If
End If
End If
[此贴子已经被作者于2011-7-7 10:40:16编辑过]
狐爸太给力了,问题解决了,这是什么原理呢?帮助文件里都没有找到这样的用法啊?
如果sys_locked本来就没有内容,那么下面的代码没有任何意义:
Tables("t_yg").Current("sys_locked") = Nothing
Tables("t_yg").Save()
因为狐表在保存前会比较列的内容是否发生变化,如果没有发生变化,就不会保存。
噢,那是不是假如在改的那一块把datatable重新load一下也会有同样效果呢?
因为前面通过UPDATE把数据表已经更新了。
不知道这个理解对不对。
你提醒了我,其实下面的代码:
Tables("t_yg").Current("sys_locked") = _UserName
DataTables("t_yg").BaseTable.AcceptChanges()
可以改为:
Tables("t_yg").Current.Load
这样更合理,也更好理解。