Foxtable(狐表)用户栏目专家坐堂 → 对用户编辑修改动作的记录跟踪


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

主题:对用户编辑修改动作的记录跟踪

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
对用户编辑修改动作的记录跟踪  发帖心情 Post By:2009/8/22 11:41:00 [只看该作者]

    为了实现对每人编辑修改记录的跟踪功能,我在datacolchanged事件中设置了以下事件。

Dim dr As DataRow = e.DataRow
If dr.RowState <> DataRowState.Added '如果不是新增加的行
    dr("操作记录") = dr("操作记录") & Chr(13) & Chr(10) & date.Now & "  【" & User.Name & "】将 〖" & e.DataCol.Name & "〗中的 <" & dr(e.DataCol.Name) & "> 修改成了 <" & e.NewValue & ">"
End If

    我本来的想法是,只要在表中修改了数据,或者通过查找替换等方式修改了数据,都在“操作记录”中记录相关内容。但郁闷的是,现在只要在表中修改数据,项目就会崩溃。看这个例子,只有几行数据而已。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

[此贴子已经被作者于2009-8-22 12:55:31编辑过]

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33957 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/8/22 12:28:00 [只看该作者]

这是正常的,正确应该是:

'跟踪每个人的编辑修改记录
Dim dr As DataRow = e.DataRow
if e.DataCol.Name <> "操作记录" Then
    If dr.RowState <> DataRowState.Added '如果不是新增加的行
        dr("操作记录") = dr("操作记录") & Chr(13) & Chr(10) & date.Now & "  【" & User.Name & "】将 〖" & e.DataCol.Name & "〗中的 <" & dr(e.DataCol.Name) & "> 修改成了 <" & e.NewValue & ">"
    End If
End If

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/8/22 12:40:00 [只看该作者]

以下是引用czy在2009-8-22 12:28:00的发言:
这是正常的,正确应该是:

'跟踪每个人的编辑修改记录
Dim dr As DataRow = e.DataRow
if e.DataCol.Name <> "操作记录" Then
    If dr.RowState <> DataRowState.Added '如果不是新增加的行
        dr("操作记录") = dr("操作记录") & Chr(13) & Chr(10) & date.Now & "  【" & User.Name & "】将 〖" & e.DataCol.Name & "〗中的 <" & dr(e.DataCol.Name) & "> 修改成了 <" & e.NewValue & ">"
    End If
End If

哈哈,厉害,C版就是高手!
如果不加e.DataCol.Name <> "操作记录" 判断的话,该列会永远被修改,从而陷入死循环。
还有个问题,在DataColChanged里好象是得不到原值的,估计要把这个代码放到DataColChanging里了。


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33957 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/8/22 12:43:00 [只看该作者]

以下是引用reachtone在2009-8-22 12:40:00的发言:


还有个问题,在DataColChanged里好象是得不到原值的,估计要把这个代码放到DataColChanging里了。


没错,老六前不久说过,判断原值只能在DataColChanging事件中。


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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19409 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/8/22 12:45:00 [只看该作者]

以下是引用czy在2009-8-22 12:43:00的发言:


没错,老六前不久说过,判断原值只能在DataColChanging事件中。

OK,已经搞定。
多谢C版!


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/8/22 14:44:00 [只看该作者]

对楼主和c版的代码增加加一个  if.....end if  。 不然("操作记录") 列中每行因为【& Chr(13) & Chr(10) &】都有个‘小空行’(当然,就希望如此的话,就别加了~  呵呵 )
Dim dr As DataRow = e.DataRow
if e.DataCol.Name <> "操作记录" Then
    If dr.RowState <> DataRowState.Added '如果不是新增加的行
        If dr("操作记录") = "" then      
            dr("操作记录") = date.Now & "  【" & User.Name & "】将 〖" & e.DataCol.Name & "〗中的 <" & dr(e.DataCol.Name) & "> 修改成了 <" & e.NewValue & ">"
        else
            dr("操作记录") = dr("操作记录") & Chr(13) & Chr(10) & date.Now & "  【" & User.Name & "】将 〖" & e.DataCol.Name & "〗中的 <" & dr(e.DataCol.Name) & "> 修改成了 <" & e.NewValue & ">"
        End If
    End If
End If

另外,操作记录 列是不是用一个 操作记录 表来替代更好(还可定期清理掉)。~ 这也有利于恢复到修改前的状况,且第一次保存前根本不需要记录的~ ······对不?


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/8/22 14:59:00 [只看该作者]

以下是引用czy在2009-8-22 12:43:00的发言:


没错,老六前不久说过,判断原值只能在DataColChanging事件中。

请教 : 下面代码(原想放在datacolchanged里,但项目崩溃了)应该放在那个事件中,或代码要怎么改?
If e.DataCol.Name = "字母列" Then    
    Dim s1 As String = currenttable(CurrentTable.Position,"字母列")   
    currenttable(CurrentTable.Position,"字母列") = s1.ToUpper()      ‘小写字母转成大写~
End If


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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/8/22 15:05:00 [只看该作者]

DataColChanging事件:

If e.DataCol.Name = "字母列" Then    
     e.NewValue = e.NewValue.ToUpper() 
End If

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/8/22 15:09:00 [只看该作者]

以下是引用狐狸爸爸在2009-8-22 15:05:00的发言:
DataColChanging事件:

If e.DataCol.Name = "字母列" Then    
     e.NewValue = e.NewValue.ToUpper() 
End If

ok!  谢谢啊~ 


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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/8/22 15:34:00 [只看该作者]

哈哈,看来六条尾巴也不管用,你还得加油啊。

从你这个代码可以看出,你还是没有掌握好DataTable和Table的差别。

 回到顶部
总数 12 1 2 下一页