Foxtable(狐表)用户栏目专家坐堂 → [求助]DataRowAdded中的e.DataRow


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

主题:[求助]DataRowAdded中的e.DataRow

美女呀,离线,留言给我吧!
cherryjing
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
[求助]DataRowAdded中的e.DataRow  发帖心情 Post By:2022/11/9 22:46:00 [只看该作者]

为了建立操作日志,在全局表的DataRowAdded事件中添加代码:

Dim strPrj As String
Dim dr As DataRow
Dim strInfo As String
Dim blValible As Boolean = False 
Select Case e.DataTable.Name
    Case "项目表"
        strInfo = "增加了一个工程:" & e.DataRow("项目简称")
        blValible = True 
    Case "合同表"
        strInfo = "增加了一个合同:" & e.DataRow("合同编号")
        blValible = True 
    Case "价格表"
        strInfo = "增加了一个合同明细:" & e.DataRow("合同编号") & e.DataRow("名称")
        blValible = True 
    Case "设备材料表"
        strInfo = e.DataRow("项目编号") & "的" & "设备材料表" & "增加了一件材料" 
        blValible = True 
End Select

If blValible Then
    Dim r As Row = Tables("日志表").AddNew()
    r("时间") = Date.Now()
    r("操作者") = _UserName
    r("操作类别") = "增加记录"
    r("操作对象") = e.DataTable.Name
    r("操作描述") = strInfo
End If


结果在日志表中发现e.DataRow("项目简称")总为空值,但运行结果,该列已被正确赋值

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106178 积分:540007 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/10 8:57:00 [只看该作者]

新增行肯定都是空行,没有的数据呀,获取数据应该到datacolchanged事件处理

 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
  发帖心情 Post By:2022/11/10 17:07:00 [只看该作者]

那么我这段创建操作日志的代码应该放在DataRowAdded中,还是datacolchanged中呢?抑或是AfterSaveDataRow?
[此贴子已经被作者于2022/11/10 17:09:50编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106178 积分:540007 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/10 17:19:00 [只看该作者]

新增行到BeforeSaveDataRow处理,数据更改到datacolchanged事件处理


 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
  发帖心情 Post By:2022/11/10 17:57:00 [只看该作者]


我在全局表的AfterSaveDataRow中输入代码:
Dim strPrj As String
Dim dr As DataRow
Dim strOp As String, strInfo As String
Dim blValible As Boolean = False
'如果保存失败,给出提示后退出
If e.Success = False Then
    MessageBox.Show(e.DataTable.Name & "保存失败!")
    Return
End If
Select Case e.StatementType
    Case 0'新增
        strOp = "增加"
    Case 1'修改
        strOp = "修改"
    Case 2'删除
        strOp = "删除"
End Select 
Select Case e.DataTable.Name
    Case "合同表"
        strInfo = strOp & "合同:" & e.DataRow("合同编号")
        blValible = True 
    Case "价格表"
        strInfo = strOp & "合同明细:" & e.DataRow("合同编号") & e.DataRow("名称")
        blValible = True 
    Case "设备材料表"
        strInfo = strOp & "设备材料:" & e.DataRow("名称") & "在项目" & e.DataRow("项目编号") & "中" 
        blValible = True 
End Select

If blValible Then
    Dim r As Row = Tables("日志表").AddNew()
    r("时间") = Date.Now()
    r("操作者") = _UserName
    r("操作类别") = strOp & "记录"
    r("操作对象") = e.DataTable.Name
    r("操作描述") = strInfo
End If

发现增加和修改都能正常执行,唯有删除时没有进入本事件,
查了增加、编辑、及删除的代码,增加和编辑中都调用了 .current.Save(),唯独删除代码仅调用了.current.delete(), 没有 .current.Save(),但是即使增加这一句进去发现也没有触发AfterSaveDataRow事件。
在帮助文件中,AfterSaveDataRow事件中的e参数StatementType:整数型,表示数据行在保存前的状态,0表示新增行,1表示修改行,2表示删除行。
请问如果是删除行,又怎么保存该DataRow?或者说删除行后要怎么触发AfterSaveDataRow事件?

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106178 积分:540007 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/10 19:59:00 [只看该作者]

删除到DataRowDeleting事件处理

 回到顶部
美女呀,离线,留言给我吧!
cherryjing
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:150 积分:1127 威望:0 精华:0 注册:2014/5/20 12:22:00
  发帖心情 Post By:2022/11/10 20:49:00 [只看该作者]

什么时候AfterSaveDataRow事件中的e参数StatementType的值会等于2呢?

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106178 积分:540007 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/10 20:57:00 [只看该作者]

已经保存过的行,删除后,在保存时触发事件,e参数StatementType的值会等于2。

新增的行,没有保存过的,删除后不会触发事件

 回到顶部