以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]DataRowAdded中的e.DataRow  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=183629)

--  作者:cherryjing
--  发布时间:2022/11/9 22:46:00
--  [求助]DataRowAdded中的e.DataRow
为了建立操作日志,在全局表的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("项目简称")总为空值,但运行结果,该列已被正确赋值

--  作者:有点蓝
--  发布时间:2022/11/10 8:57:00
--  
新增行肯定都是空行,没有的数据呀,获取数据应该到datacolchanged事件处理
--  作者:cherryjing
--  发布时间:2022/11/10 17:07:00
--  
那么我这段创建操作日志的代码应该放在DataRowAdded中,还是datacolchanged中呢?抑或是AfterSaveDataRow?
[此贴子已经被作者于2022/11/10 17:09:50编辑过]

--  作者:有点蓝
--  发布时间:2022/11/10 17:19:00
--  
新增行到BeforeSaveDataRow处理,数据更改到datacolchanged事件处理


--  作者:cherryjing
--  发布时间: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事件?

--  作者:有点蓝
--  发布时间:2022/11/10 19:59:00
--  
删除到DataRowDeleting事件处理
--  作者:cherryjing
--  发布时间:2022/11/10 20:49:00
--  
什么时候AfterSaveDataRow事件中的e参数StatementType的值会等于2呢?
--  作者:有点蓝
--  发布时间:2022/11/10 20:57:00
--  
已经保存过的行,删除后,在保存时触发事件,e参数StatementType的值会等于2。

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