Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共12 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

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

1楼
reachtone 发表于: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编辑过]
2楼
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
3楼
reachtone 发表于: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里了。

4楼
czy 发表于:2009/8/22 12:43:00
以下是引用reachtone在2009-8-22 12:40:00的发言:


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


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

5楼
reachtone 发表于:2009/8/22 12:45:00
以下是引用czy在2009-8-22 12:43:00的发言:


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

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

6楼
mr725 发表于: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

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

7楼
mr725 发表于: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楼
狐狸爸爸 发表于:2009/8/22 15:05:00
DataColChanging事件:

If e.DataCol.Name = "字母列" Then    
     e.NewValue = e.NewValue.ToUpper() 
End If
9楼
mr725 发表于: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楼
狐狸爸爸 发表于:2009/8/22 15:34:00
哈哈,看来六条尾巴也不管用,你还得加油啊。

从你这个代码可以看出,你还是没有掌握好DataTable和Table的差别。
共12 条记录, 每页显示 10 条, 页签: [1] [2]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .03516 s, 3 queries.