以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]克隆行时DataRowAdding中Nothing为何无效-已解决  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=38559)

--  作者:shenyl0211
--  发布时间:2013/8/1 8:50:00
--  [求助]克隆行时DataRowAdding中Nothing为何无效-已解决

如题,在全局表的DataRowAdding(解决办法:放在DataRowAdded)事件中代码如下,希望克隆行时用Nothing将复核人、复核日期、审批人、审批日期清空,但无效,不过可以用非空数据:

Select Case e.DataTable.Name 
      Case "出差管理"
        e.DataRow("填写日期") = Date0 \'获取的服务器日期
        e.DataRow("经办人") = _UserName \'登录用户名

        e.DataRow("复核人") = nothing \'别的字符都行,但Nothing无效,下同

        e.DataRow("复核日期") = nothing  

        e.DataRow("审批人") = nothing

        e.DataRow("审批日期") = nothing    

End Select

[此贴子已经被作者于2013-8-1 11:18:38编辑过]

--  作者:Bin
--  发布时间:2013/8/1 8:53:00
--  
该列设置了不能为空吧? 上个例子看看.
--  作者:shenyl0211
--  发布时间:2013/8/1 9:08:00
--  
以下是引用Bin在2013-8-1 8:53:00的发言:
该列设置了不能为空吧? 上个例子看看.
起初必须为空,因为复核和审批是后来的事


--  作者:Bin
--  发布时间:2013/8/1 9:10:00
--  
上个例子看看吧
--  作者:lsy
--  发布时间:2013/8/1 9:19:00
--  

If e.DataTable.DataRows.Count = 0 Then \'如果是一个空表
    Return \'那么返回
End If
Dim ColNames As String() = {"确认","客户","特殊产品"} \'定义一个数组,保存复制列的名称
Dim dr As DataRow = e.DataTable.DataRows(e.DataTable.DataRows.Count - 1) \'获得最后一行
For Each ColName As String in ColNames
    e.DataRow(ColName) = dr(ColName) \'将最后一行的内容复制到新增行中.
Next

 

想设置为Nothing的就不包含在数组中。


--  作者:狐狸爸爸
--  发布时间:2013/8/1 9:19:00
--  

请将代码写在DataRowAdded事件中,而不是DataRowAdding事件。

 

 


--  作者:Bin
--  发布时间:2013/8/1 9:23:00
--  
以下是引用狐狸爸爸在2013-8-1 9:19:00的发言:

请将代码写在DataRowAdded事件中,而不是DataRowAdding事件。

 

 

晕,细节..
--  作者:shenyl0211
--  发布时间:2013/8/1 11:15:00
--  

我也晕!DataRowAdding中能执行的代码,在DataRowAdded中也能执行;而前者不能执行的代码,后者也能执行。在后者中,插入行、添加行、克隆行都一样。那DataRowAdding还有用吗?


--  作者:Bin
--  发布时间:2013/8/1 11:17:00
--  

DataRowAdding

增加一行时执行,此时新增行(DataRow)已经创建,但并未真正增加到DataTable中,通常在此处对新增行进行默认值的设置。


--  作者:狐狸爸爸
--  发布时间:2013/8/1 11:19:00
--  

克隆行的过程是:

 

1、执行DataRowAdding事件

2、从被克隆的行赋值数据到新的行

3、执行DataRowAdded事件。

 

 

明白了?