以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求助  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=18947)

--  作者:wilson
--  发布时间:2012/4/22 18:52:00
--  求助

运行下面代码出错

Select Case e.DataCol.Name
    Case   "产品名称","产品颜色","产品规格","销售价"  

        Dim Filter As String  = "产品型号 =" & e.DataRow("产品型号")
        Dim drs As List(of DataRow) = DataTables("订单明细表").Select(Filter) 

        For Each dr As DataRow In drs
            dr("产品名称") = e.DataRow("产品名称")
            If dr.Locked = False AndAlso dr("已发货") = False  

                dr("销售价") = e.DataRow("销售价")
            End If
        Next
    Case  "产品型号"
        Dim Filter As String  = "产品型号 =" & e.DataRow("产品型号")
        e.DataRow("销售_数量") = DataTables("订单明细表").Compute("Sum(数量)", Filter)
        e.DataRow("销售_金额") = DataTables("订单明细表").Compute("Sum(金额)", Filter)
        e.DataRow("未发货订单_数量") = DataTables("订单明细表").Compute("Sum(数量)", Filter & " And 已付款 = true")
        e.DataRow("未发货订单_金额") = DataTables("订单明细表").Compute("Sum(金额)", Filter & " And 已付款 = true")

If e.DataCol.Name = "产品型号"
    Dim pr As DataRow
    If e.NewValue Is Nothing Then
        e.DataRow("销售价") = Nothing
        e.DataRow("产品名称") = Nothing
    Else
        pr = DataTables("产品信息表").Find("[产品型号] = " & e.NewValue)
        If pr IsNot Nothing Then
            e.DataRow("销售价") = pr("销售价")
            e.DataRow("产品名称") = pr("产品名称")
            If e.OldValue <> e.NewValue Then \'如果新旧产品编号不同.
                DataTables("产品信息表").DataCols("产品型号").RaiseDataColChanged(pr)

            End If
        End If
     End If
     If e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then 

        pr = DataTables("产品信息表").Find("[产品型号] = " & e.OldValue)
        If pr IsNot Nothing Then
            DataTables("产品信息表").DataCols("产品型号").RaiseDataColChanged(pr)

        End If
     End If
End If
Select Case e.DataCol.Name
    Case "数量","折扣","已付款","销售价"
        If e.OldValue <> e.NewValue Then
            Dim pr As DataRow
            pr = DataTables("产品信息表").Find("[产品型号] = " & e.DataRow("产品型号") )
            If pr IsNot Nothing Then
                DataTables("产品信息表").DataCols("产品型号").RaiseDataColChanged(pr)
            End If
        End If
End Select


此主题相关图片如下:4-22.jpg
按此在新窗口浏览图片

--  作者:程兴刚
--  发布时间:2012/4/22 19:09:00
--  

Select Case e.DataCol.Name
    Case   "产品名称","产品颜色","产品规格","销售价"
        Dim Filter As String  = "产品型号 = \'" & e.DataRow("产品型号") & "\'"
        Dim drs As List(of DataRow) = DataTables("订单明细表").Select(Filter)
        For Each dr As DataRow In drs
            dr("产品名称") = e.DataRow("产品名称")
            If dr.Locked = False AndAlso dr("已发货") = False
                dr("销售价") = e.DataRow("销售价")
            End If
        Next
    Case  "产品型号"
        Dim Filter As String  = "产品型号 = \'" & e.DataRow("产品型号") & "\'"
        e.DataRow("销售_数量") = DataTables("订单明细表").Compute("Sum(数量)", Filter)
        e.DataRow("销售_金额") = DataTables("订单明细表").Compute("Sum(金额)", Filter)
        e.DataRow("未发货订单_数量") = DataTables("订单明细表").Compute("Sum(数量)", Filter & " And 已付款 = true")
        e.DataRow("未发货订单_金额") = DataTables("订单明细表").Compute("Sum(金额)", Filter & " And 已付款 = true")
       
       
        If e.DataCol.Name = "产品型号"
            Dim pr As DataRow
            If e.NewValue Is Nothing Then
                e.DataRow("销售价") = Nothing
                e.DataRow("产品名称") = Nothing
            Else
                pr = DataTables("产品信息表").Find("[产品型号] = \'" & e.NewValue & "\'")
                If pr IsNot Nothing Then
                    e.DataRow("销售价") = pr("销售价")
                    e.DataRow("产品名称") = pr("产品名称")
                    If e.OldValue <> e.NewValue Then \'如果新旧产品编号不同.
                        DataTables("产品信息表").DataCols("产品型号").RaiseDataColChanged(pr)
                    End If
                End If
            End If
            If e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
                pr = DataTables("产品信息表").Find("[产品型号] = \'" & e.OldValue & "\'")
                If pr IsNot Nothing Then
                    DataTables("产品信息表").DataCols("产品型号").RaiseDataColChanged(pr)
                   
                End If
            End If
        End If
        Select Case e.DataCol.Name
            Case "数量","折扣","已付款","销售价"
                If e.OldValue <> e.NewValue Then
                    Dim pr As DataRow
                    pr = DataTables("产品信息表").Find("[产品型号] = \'" & e.DataRow("产品型号") & "\'")
                    If pr IsNot Nothing Then
                        DataTables("产品信息表").DataCols("产品型号").RaiseDataColChanged(pr)
                    End If
                End If
        End Select
End Select


--  作者:程兴刚
--  发布时间:2012/4/22 19:24:00
--  

从代码逻辑看,这样效果应该一样,有些判断有些多余:

 

Select Case e.DataCol.Name
    Case   "产品名称","产品颜色","产品规格","销售价"
        Dim Filter As String  = "产品型号 = \'" & e.DataRow("产品型号") & "\'"
        Dim drs As List(of DataRow) = DataTables("订单明细表").Select(Filter)
        For Each dr As DataRow In drs
            dr("产品名称") = e.DataRow("产品名称")
            If dr.Locked = False AndAlso dr("已发货") = False
                dr("销售价") = e.DataRow("销售价")
            End If
        Next
    Case  "产品型号"
        Dim Filter As String  = "产品型号 = \'" & e.DataRow("产品型号") & "\'"
        e.DataRow("销售_数量") = DataTables("订单明细表").Compute("Sum(数量)", Filter)
        e.DataRow("销售_金额") = DataTables("订单明细表").Compute("Sum(金额)", Filter)
        e.DataRow("未发货订单_数量") = DataTables("订单明细表").Compute("Sum(数量)", Filter & " And 已付款 = true")
        e.DataRow("未发货订单_金额") = DataTables("订单明细表").Compute("Sum(金额)", Filter & " And 已付款 = true")
        Dim pr As DataRow
        If e.NewValue Is Nothing Then
            e.DataRow("销售价") = Nothing
            e.DataRow("产品名称") = Nothing
        Else
            pr = DataTables("产品信息表").Find("[产品型号] = \'" & e.NewValue & "\'")
            If pr IsNot Nothing Then
                e.DataRow("销售价") = pr("销售价")
                e.DataRow("产品名称") = pr("产品名称")
                If e.OldValue <> e.NewValue Then \'如果新旧产品编号不同.
                    DataTables("产品信息表").DataCols("产品型号").RaiseDataColChanged(pr)
                End If
            End If
        End If
        If e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            pr = DataTables("产品信息表").Find("[产品型号] = \'" & e.OldValue & "\'")
            If pr IsNot Nothing Then
                DataTables("产品信息表").DataCols("产品型号").RaiseDataColChanged(pr)
               
            End If
        End If
    Case "数量","折扣","已付款","销售价"
        If e.OldValue <> e.NewValue Then
            Dim pr As DataRow
            pr = DataTables("产品信息表").Find("[产品型号] = \'" & e.DataRow("产品型号") & "\'")
            If pr IsNot Nothing Then
                DataTables("产品信息表").DataCols("产品型号").RaiseDataColChanged(pr)
            End If
        End If
End Select


--  作者:wilson
--  发布时间:2012/4/23 10:27:00
--  

谢谢你程老师!

我的问提解决了