以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 帮忙简化下代码吧 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=32931) |
-- 作者:jiskin -- 发布时间:2013/5/10 16:57:00 -- 帮忙简化下代码吧 Select Case e.DataCol.name Case "零件名称","规格","材质" Dim dr As DataRow = e.DataRow Dim pr As DataRow If dr.Isnull("零件名称") AndAlso dr.Isnull("规格") AndAlso dr.Isnull("材质") Then dr("仓库_库位代码") = Nothing Else If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = False AndAlso dr.Isnull("材质") = False Then pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [规格] = \'" & dr("规格") & "\' and [材质] = \'" & dr("材质") & "\'") dr("仓库_库位代码") = pr("储位") End If If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = False AndAlso dr.Isnull("材质") = True Then pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [规格] = \'" & dr("规格") & "\'") dr("仓库_库位代码") = pr("储位") End If If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = True AndAlso dr.Isnull("材质") = False Then pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [材质] = \'" & dr("材质") & "\'") dr("仓库_库位代码") = pr("储位") End If If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = True AndAlso dr.Isnull("材质") = True Then dr("仓库_库位代码") = Nothing End If End If End Select 谁帮我简化一下啊 "零件名称","规格","材质"三个列 如果三列有都内容 就根据这三列内容查找 如果名称有内容 规格有内容 材质无内容 就根据名称 规格找 如果名称有内容 材质有内容 就根据这两个找 |
-- 作者:don -- 发布时间:2013/5/10 17:36:00 -- Select Case e.DataCol.name Case "零件名称","规格","材质" Dim flt As String Dim dr As DataRow = e.DataRow Dim v1 as String() = {"品名","规格","材质"} Dim v2 as String() = {"零件名称","规格","材质"} For n1 As Integer = 0 to v2.length-1 if dr.Isnull(s1) =False Then flt+ = " and " & v1(n1) & " = \'" & dr(v2(n1)) & "\'" End if next If fllt = Nothing Then dr("仓库_库位代码") = Nothing Else Dim pr As DataRow = DataTables("库存总表").Find(flt.substring(5)) If pr isnot nothing Then dr("仓库_库位代码") = pr("储位") End If End Select
|
-- 作者:jspta -- 发布时间:2013/5/10 17:42:00 -- 以下是引用jiskin在2013-5-10 16:57:00的发言:
Select Case e.DataCol.name
Case "零件名称","规格","材质"
Dim dr As DataRow = e.DataRow
Dim pr As DataRow
If dr.Isnull("零件名称") AndAlso dr.Isnull("规格") AndAlso dr.Isnull("材质") Then
dr("仓库_库位代码") = Nothing
Else
If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = False AndAlso dr.Isnull("材质") = False Then
pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [规格] = \'" & dr("规格") & "\' and [材质] = \'" & dr("材质") & "\'")
dr("仓库_库位代码") = pr("储位")
End If
If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = False AndAlso dr.Isnull("材质") = True Then
pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [规格] = \'" & dr("规格") & "\'")
dr("仓库_库位代码") = pr("储位")
End If
If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = True AndAlso dr.Isnull("材质") = False Then
pr = DataTables("库存总表").Find("[品名] = \'" & dr("零件名称") & "\' and [材质] = \'" & dr("材质") & "\'")
dr("仓库_库位代码") = pr("储位")
End If
If dr.Isnull("零件名称") = False AndAlso dr.Isnull("规格") = True AndAlso dr.Isnull("材质") = True Then
dr("仓库_库位代码") = Nothing
End If
End If
End Select
谁帮我简化一下啊
"零件名称","规格","材质"三个列 如果三列有都内容 就根据这三列内容查找 如果名称有内容 规格有内容 材质无内容 就根据名称 规格找 如果名称有内容 材质有内容 就根据这两个找 Dim arr1() As String = {"零件名称","规格","材质"} if str > "" then end if
感觉你这代码设置的地方有点不合理 [此贴子已经被作者于2013-5-10 17:43:34编辑过]
|
-- 作者:jiskin -- 发布时间:2013/5/10 19:15:00 -- 以下是引用jspta在2013-5-10 17:42:00的发言:
Dim arr1() As String = {"零件名称","规格","材质"} if str > "" then end if
感觉你这代码设置的地方有点不合理 [此贴子已经被作者于2013-5-10 17:43:34编辑过]
是不是因为两张表源自两个access数据库的原因?代码运行的后总是出错 未将对象引用设置到对象的实例 另外 能帮忙解释下If dr.IsNull(arr1(intA)) = False Then |
-- 作者:jiskin -- 发布时间:2013/5/10 19:24:00 -- 以下是引用don在2013-5-10 17:36:00的发言:
Select Case e.DataCol.name
Case "零件名称","规格","材质"
Dim flt As String
Dim dr As DataRow = e.DataRow
Dim v1 as String() = {"品名","规格","材质"}
Dim v2 as String() = {"零件名称","规格","材质"}
For n1 As Integer = 0 to v2.length-1
if dr.Isnull(s1) =False Then
flt+ = " and " & v1(n1) & " = \'" & dr(v2(n1)) & "\'"
End if
next
If fllt = Nothing Then
dr("仓库_库位代码") = Nothing
Else
Dim pr As DataRow = DataTables("库存总表").Find(flt.substring(5))
If pr isnot nothing Then dr("仓库_库位代码") = pr("储位")
End If
End Select
if dr.Isnull(n1) =False Then flt+ = " and " & v1(n1) & " = \'" & dr(v2(n1)) & "\'"
这句能帮忙解释下吗看不懂哈, for next下 n1 不是 0 1 2 这几个数字么?
|
-- 作者:jspta -- 发布时间:2013/5/11 17:04:00 -- 以下是引用jiskin在2013-5-10 19:15:00的发言:
是不是因为两张表源自两个access数据库的原因?代码运行的后总是出错 未将对象引用设置到对象的实例 另外 能帮忙解释下If dr.IsNull(arr1(intA)) = False Then 第一句话判断是否是空值,跟你原来一样 然后 进行表达式合成, arr2是数组,你可以看下数组内容。这段循环的意思就是,循环数组中的名称,以达到判断该列是否为空的目的。 你可以加一条message.show(str)查看下这个合成了什么,跟你想要的代码是不是一致。 |