Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
试试这个(放在datacolchanged事件中):
dim bm as string = currenttable.current("部门编码")
Dim ls() as String
ls = bm.split("-")
If bm <> "" Then
Select Case ls.Length
Case 1
currenttable.current("部门全称") = currenttable.current("部门名称")
Case 2
Dim dr As DataRow
dr = DataTables("部门表").Find("部门编码 = '" & ls(0) & "'")
currenttable.current("部门全称") = dr("部门名称") & "-" & currenttable.current("部门名称")
Case 3
Dim dr As DataRow
dr = DataTables("部门表").Find("部门编码 = '" & ls(0) & "-" & ls(1) & "'")
currenttable.current("部门全称") = dr("部门全称") & "-" & currenttable.current("部门名称")
End Select
End If
这样不报错:
Select Case e.DataCol.Name
case "部门编码","部门名称"
Dim dr As DataRow
dim bm as string = currenttable.current("部门编码")
Dim ls() as String
ls = bm.split("-")
If bm <> "" Then
If ls.Length<=1 Then
currenttable.current("部门全称") = currenttable.current("部门名称")
Elseif ls.Length<=2 Then
dr = DataTables("部门表").Find("部门编码 = '" & ls(0) & "'")
if dr IsNot Nothing Then
currenttable.current("部门全称") = dr("部门名称") & "-" & currenttable.current("部门名称")
End If
ElseIf ls.Length<=3 Then
dr = DataTables("部门表").Find("部门编码 = '" & ls(0) & "-" & ls(1) & "'")
if dr IsNot Nothing Then
currenttable.current("部门全称") = dr("部门全称") & "-" & currenttable.current("部门名称")
End If
End if
End If
End Select
以为你会用狐表呢··· 在4楼基础上再加些判断:
If e.DataCol.Name = "部门编码" and e.DataRow.IsNull("部门编码") Then
e.DataRow("部门名称") = nothing
e.DataRow("部门全称") = nothing
ElseIf e.DataCol.Name = "部门名称" and e.DataRow.IsNull("部门名称") Then
e.DataRow("部门全称") = nothing
Else
dim bm as string = e.DataRow("部门编码")
Dim ls() as String
ls = bm.split("-")
If bm <> "" Then
Select Case ls.Length
Case 1
e.DataRow("部门全称") = e.DataRow("部门名称")
Case 2
Dim dr As DataRow
dr = DataTables("部门表").Find("部门编码 = '" & ls(0) & "'")
if dr IsNot Nothing Then
e.DataRow("部门全称") = dr("部门名称") & "-" & e.DataRow("部门名称")
else
messagebox.show("没有上一级编码")
e.DataRow("部门编码") = nothing
end if
Case 3
Dim dr As DataRow
dr = DataTables("部门表").Find("部门编码 = '" & ls(0) & "-" & ls(1) & "'")
if dr IsNot Nothing Then
e.DataRow("部门全称") = dr("部门全称") & "-" & e.DataRow("部门名称")
else
messagebox.show("没有上一级编码")
e.DataRow("部门编码") = nothing
end if
End Select
End If
End If
楼主记得使用Datacolchanged事件的时候,一定要判断列名。
一定要判断列名!
不少人,特别是初学编程的人,没有在DataColChanged事件中判断列名的习惯,例如为了在订单表计算金额,往往只是在DataColChanged简单地写入代码:
Dim dr As DataRow = e.DataRow
dr("金额") = dr("数量") * dr("单价") * (1 - dr("折扣"))
这样可能会带来严重的后果,首先会导致重复的计算,因为数量、单价或折扣发生变化后,触发DataColChanged事件,计算得出新的金额,而金额列内容的变化,会再次触发DataColChanged事件,使得金额被重新计算一次;实际上其他不相关列,例如日期、客户、产品等列内容发生变化后,同样会触发DataColChanged事件,导致金额列被重新计算。
显然这样的代码,效率实在是太低,而且在机缘巧合的情况下,很可能会出现死循环,导致程序崩溃。
所以我们一定要养成良好的习惯,在编写DataColChanged事件代码时,判断发生变化列的名称,只有相关列发生变化时,才进行特定的重算工作。
例如:
Dim
dr As DataRow = e.DataRow这节的内容不仅仅针对DataColChanged,实际上对于任何表事件都有效,例如DataColChaning、PrepareEdit、ValidateEdit、AfterEdit等等。