Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
If e.DataCol.Name = "工序编号" Then
Dim dys As List(Of String) = DataTables("工序单价表").GetUniqueValues("","工序编号")
For Each dy As String In dys
dim n as integer = 0
Dim drs As List(Of DataRow)
drs = DataTables("工序单价表").Select("[工序编号] = '" & dy & "'")
For Each dr As Datarow In drs
n = n + 1
dr("规格次序") =Format(n,"000")
Next
next
if e.dataRow.IsNull("工序编号")
e.dataRow("规格次序") = ""
end if
end if
If e.DataCol.Name = "工序编号" Then
e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If
先定工序编号列然后重置列,但发现工序规格码只有第一行起变化,如果一行行地选工序编码就能变化。为会什么呢?
你用的是菜单中的重置按钮吗,按道里不会这样的,因为菜单的重置是针对所有行的。
另外你的代码,为啥两个 If e.DataCol.Name = "工序编号" Then ?
通常应该这样:
If e.DataCol.Name = "工序编号" Then
Dim dys As List(Of String) = DataTables("工序单价表").GetUniqueValues("","工序编号")
For Each dy As String In dys
dim n as integer = 0
Dim drs As List(Of DataRow)
drs = DataTables("工序单价表").Select("[工序编号] = '" & dy & "'")
For Each dr As Datarow In drs
n = n + 1
dr("规格次序") =Format(n,"000")
Next
next
if e.dataRow.IsNull("工序编号")
e.dataRow("规格次序") = ""
end if
e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If
当然这不影响计算的,只是不规范。
哦,我发现规格次序就能变化工序规格码就不能变化,另工序编号及规格次序都为字符型,事件为DataColChanged
规格次序 和 工序规格码,前者是所有行都算了一次,后者则只是触发事件的行算了一次 。
代码是死的,你让他干啥就干啥,不会多干一点,也不会少干一点,你自己慢慢分析吧。
实在搞不定,就做个简单的例子上来,而且要具体第描述问题:出于什么目的? 在什么事件写了什么代码? 希望的情况应该怎样? 现在的情况却是怎样?
我在在DataColChanged事件中设置如下代码:
If e.DataCol.Name = "工序编号"Then '发生变化的是工序编号吗?
'在工序编码表找出该工序
Dim dr As DataRow
dr = DataTables("工序编码表").Find("工序编号 = " & "'" & e.DataRow("工序编号") & "'" )
If dr IsNot Nothing '如果找到, 则设置各列内容
e.DataRow("工序名称")= dr("工序名称")
e.DataRow("部门")= dr("部门")
Dim dys As List(Of String) = DataTables("工序单价表").GetUniqueValues("","工序编号")
For Each dy As String In dys
dim n as integer = 0
Dim drs As List(Of DataRow)
drs = DataTables("工序单价表").Select("[工序编号] = '" & dy & "'")
For Each dr1 As Datarow In drs
n = n + 1
dr1("规格次序") =Format(n,"000")
Next
next
Else
e.DataRow("部门") =Nothing
e.DataRow("工序名称") = "还未有这个工序,请在工序编码表中设置"
e.dataRow("规格次序") = ""
e.dataRow("工序规格码")=""
End If
End If
If e.DataCol.Name = "规格次序" Then
e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If
结果是重置工序编码列时 规格次序 列能变化并数据正确,但 工序规格码 列数据却等于 工序编号,如果是新增的行或手功改动 工序编号 列时工序规格码就能如意得到!
If e.DataCol.Name = "规格次序" Then
e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If
改为:
If e.DataCol.Name = "规格次序" Orlese e.DataCol.Name = "工序编号" Then
e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If
If e.DataCol.Name = "工序编号"Then '发生变化的是工序编号吗?
'在工序编码表找出该工序
Dim dr As DataRow
dr = DataTables("工序编码表").Find("工序编号 = " & "'" & e.DataRow("工序编号") & "'" )
If dr IsNot Nothing '如果找到, 则设置各列内容
e.DataRow("工序名称")= dr("工序名称")
e.DataRow("部门")= dr("部门")
Dim dys As List(Of String) = DataTables("工序单价表").GetUniqueValues("","工序编号")
For Each dy As String In dys
dim n as integer = 0
Dim drs As List(Of DataRow)
drs = DataTables("工序单价表").Select("[工序编号] = '" & dy & "'")
For Each dr1 As Datarow In drs
n = n + 1
dr1("规格次序") =Format(n,"000")
Next
next
Else
'否则清除区号和邮编两列的内容
e.DataRow("部门") =Nothing
e.DataRow("工序名称") = "还未有这个工序,请在工序编码表中设置"
e.dataRow("规格次序") = ""
e.dataRow("工序规格码")=""
End If
End If
If e.DataCol.Name = "规格次序" OrElse e.DataCol.Name = "工序编号" Then
e.DataRow("工序规格码")=e.DataRow("工序编号") + e.DataRow("规格次序")
End If
这样还是不行,工序规格码还是工序编号,加OrElse e.DataCol.Name = "工序编号"这句只是起到当我点选工序编列然后离开,工序规格码才得到想要的数据。
从理论来说,这是不可能的事情。
我没有别的办法了,我投降,你自己慢慢研究,搞不定就做一个简单的例子测试,我们有办法继续蒙下去了