Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
表中,DataColChanged 事件代码如下
Select Case e.DataCol.Name
Case "是否有管理责任"
if e.DataRow.IsNull("是否有管理责任") = False Then
if e.DataRow("是否有管理责任") = "是" then
Tables("表A").AddNew(1)
Dim drs As List(Of DataRow) = DataTables("表A").Select("")
For n As integer = 0 To drs.Count - 1
If n > 0 Then
drs(n)("姓名") = drs(n-1)("直接上司")
drs(n)("失职扣分") = drs(n-1)("失职扣分")*drs(n-1)("上司责任比例")
drs(n)("工作内容") = drs(n-1)("姓名") & drs(n-1)("工作内容")
End If
Next
end if
end if
End Select
疑问:两人同时操作时,会不会有复制错误的可能?
假设:A操作者正在输入 第1行,此时 _Identify = 1
B操作者正在输入 第2行,此时 _Identify = 2
当 A 在 “是否有管理责任" 列中输入 "是”,执行上面命令。新增一行。_Identify = 3 ,,,,drs(n-1) 不是等于2了吗??
我的理解是 复制的数据就不是A操作者的了。而是B操作者的数据了。。
怎么样解决这种问题的出现?
下载信息 [文件大小: 下载次数: ] | |
![]() |
狐爸,请看图
表中已有一条记录。
现在输入第二条记录,当我在 [是否有管理责任] 列中选择 是 。
希望得到的结果是:表格自动新增加一行。
新增行中,姓名 = 上一行的 直接上司
工作内容 = 上一行的 姓名 & 工作内容
失职扣分 = 上一行的 失职扣分 * 上司职责比例
现在文件中的代码是错误的。 在 [是否有管理责任] 列中选择 是 以后。得到的结果是
所有的行都重新计算了。。。
用DataRowAdding事件
或者:
Select Case e.DataCol.Name
Case "是否有管理责任"
if e.DataRow.IsNull("是否有管理责任") = False Then
if e.DataRow("是否有管理责任") = "是" then
Dim dr1 As Row = Tables("表A").rows(Tables("表A").Rows.Count -1)
Dim dr2 As Row = Tables("表A").AddNew()
dr2("姓名") = dr1("直接上司")
dr2("失职扣分") = dr1("失职扣分") * dr1("上司责任比例")
dr2("工作内容") = dr1("姓名") & dr1("工作内容")
end if
end if
End Select
其实问题就是简化为:如何获得最后一行和新增加的行。
狐爸。5楼已经实现了复制上一行的功能。
还有一个问题请麻烦您一下。
根据5楼的代码,已复制了一行新的记录。
dr2("失职扣分") = dr1("失职扣分") * dr1("上司责任比例")
dr2("工作内容") = dr1("姓名") & dr1("工作内容")
失职扣分列 与 工作内容列 都有了数据
假如,又返回到第一行,重新修改了第一行的 失职扣分 列中的数据。怎么让 第二行 的 失职扣分列,自动更新??
在DataColChanged 事件中。输入此代码,可实现这功能。
多增加一个,,记录列 记录跟踪编码
case “失职扣分”
Dim Filter As String = "[_Identify] > " & e.DataRow("_Identify") & " And [记录跟踪编码] = '" & dr("记录跟踪编码") & "'"
Dim drs As List(Of DataRow) = DataTables("表A").Select(Filter)
For Each rd As DataRow In drs
If rd.Locked = False
rd("失职扣分") = dr("失职扣分") * dr("上司责任比例")
End If
Next
这样,同 AfterEdit事件 比起来,应该差不多吧,有没有什么逻辑上的错误?
不懂你的意思,你不是修改某行后,自动更新其后的一行吗?你这好像是更新其后所有的行,而且这些行的失职扣分列内容将完全相同。
这个应该你根据自己的需要编写调试代码,有问题再提问,因为只有你自己明白自己的需要。