以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  动态筛选求助,请求老师协助  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=131144)

--  作者:Saberzsp
--  发布时间:2019/2/18 16:59:00
--  动态筛选求助,请求老师协助

如果产品表和订单表是通过品名、型号、规格这三列联系起来的(不管是否建立了关联),在订单表输入品名、型号、规格后,再从产品表找出对应产品的单价,填入单价列中,那么订单表的DataColChanged事件可如下设置代码:

Select Case e.DataCol.Name
    Case
"品名","型号",
"规格"
       
Dim dr As DataRow = e.DataRow
       
Dim pr As DataRow
       
If dr.IsNull("品名") OrElse dr.IsNull("型号") OrElse dr.IsNull("规格") Then
            dr(
"单价") = Nothing
       
Else
           
Dim filter As String
            filter =
"品名 = \'" & dr("品名") & "\' And 型号 = \'" & dr("型号") & "\' And 规格 = \'" & dr("规格") & "\'"
            pr =
DataTables("产品").Find(filter)
            If
pr IsNot Nothing
Then
                dr(
"单价") = pr("单价")
            End
If
       
End If
End
Select


想请教老师,如果规格为空字符能否实现单价能显示,哪位能帮忙改一下?谢谢!

[此贴子已经被作者于2019/2/18 17:08:05编辑过]

--  作者:有点蓝
--  发布时间:2019/2/18 17:46:00
--  
Select Case e.DataCol.Name
    Case
 "品名","型号",
"规格"
        
Dim dr As DataRow = e.DataRow
        
Dim pr As DataRow
        
If dr.IsNull("品名"OrElse dr.IsNull("型号"Then
            dr(
"单价") = Nothing
        
Else
            
Dim filter As String
If dr.IsNull("规格")
    filter = "品名 = \'" & dr("品名") & "\' And 型号 = \'" & dr("型号") & "\' And 规格 is null"
Else
    filter = "品名 = \'" & dr("品名") & "\' And 型号 = \'" & dr("型号") & "\' And 规格 = \'" & dr("规格") & "\'"
End If
            pr = 
DataTables("产品").Find(filter)
            If
 pr IsNot Nothing 
Then
                dr(
"单价") = pr("单价")
            End
 
If
        
End If
End
 Select
--  作者:Saberzsp
--  发布时间:2019/2/20 9:35:00
--  
谢谢有点蓝老师
--  作者:Saberzsp
--  发布时间:2019/2/21 11:27:00
--  
有点蓝老师,动态筛选超过4个好像就不太好用了,测试了很多次,显示不全?
[此贴子已经被作者于2019/2/21 11:28:00编辑过]

--  作者:奶粉大王
--  发布时间:2019/2/21 11:31:00
--  
代码贴出来 肯定漏写了参数
--  作者:Saberzsp
--  发布时间:2019/2/21 15:58:00
--  
Select Case e.DataCol.Name
    Case "名称","规格型号","材质","技术参数备注"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("名称") OrElse dr.IsNull("规格型号")  Then
            dr("图号位号") = Nothing
        Else
            Dim filter As String
            filter = "名称 = \'" & dr("名称") & "\' And 规格型号 = \'" & dr("规格型号") & "\' And 材质 = \'" &dr("材质") & "\' And 技术参数备注 = \'" &dr("技术参数备注") & "\'And 品牌 = \'" &dr("品牌") & "\'" 
            pr = DataTables("基础数据").Find(filter)
            If pr IsNot Nothing Then
                dr("图号位号") = pr("图号位号")
            End If
        End If
End Select


老师帮忙看一下,哪里有遗漏,只要删除一个又能正常了

--  作者:有点蓝
--  发布时间:2019/2/21 16:27:00
--  
哪个列是可以为空的?
--  作者:Saberzsp
--  发布时间:2019/2/21 17:07:00
--  
If dr.IsNull("规格") OrElse dr.IsNull("其他列")
    filter = "品名 = \'" & dr("品名") & "\' And 型号 = \'" & dr("型号") & "\' And (规格 is null OrElse 其他列 is null)"
Else
    filter = "品名 = \'" & dr("品名") & "\' And 型号 = \'" & dr("型号") & "\' And 规格 = \'" & dr("规格") & "And 其他列 = \'" & dr("其他列") & "\'\'"
End If

蓝老师,有多列空值这样写,对吗?

--  作者:Saberzsp
--  发布时间:2019/2/21 17:09:00
--  
材质或者技术参数列为空
--  作者:有点蓝
--  发布时间:2019/2/21 17:24:00
--  
Select Case e.DataCol.Name
    Case "名称","规格型号","材质","技术参数备注","品牌"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("名称") OrElse dr.IsNull("规格型号") OrElse dr.IsNull("品牌")  Then
            dr("图号位号") = Nothing
        Else
            Dim filter As String
            filter = "名称 = \'" & dr("名称") & "\' And 规格型号 = \'" & dr("规格型号") & "\' And 品牌 = \'" &dr("品牌") & "\'"
            If dr.IsNull("材质") = False
                filter = filter & "\' And 材质 = \'" &dr("材质") & "\'"
            End If
            If dr.IsNull("技术参数备注") = False
                filter = filter & "\' And 技术参数备注 = \'" &dr("技术参数备注")  & "\'"
            End If
            pr = DataTables("基础数据").Find(filter)
            If pr IsNot Nothing Then
                dr("图号位号") = pr("图号位号")
            End If
        End If
End Select