Foxtable(狐表)用户栏目专家坐堂 → 为什么重置二次才出现正确结果


  共有5145人关注过本帖树形打印复制链接

主题:为什么重置二次才出现正确结果

帅哥哟,离线,有人找我吗?
xzc1221
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:46 积分:496 威望:0 精华:0 注册:2012/8/21 21:47:00
为什么重置二次才出现正确结果  发帖心情 Post By:2013/6/2 21:59:00 [只看该作者]

'下面的代码为什么重置二次才出现正确结果

Select Case e.DataCol.Name
    Case "应分面积"
    Dim drr As  DataRow = e.DataRow
    drr("垂长累计") =( Math.Sqrt(2 * drr("累计面积") * drr("南北垂长") * (drr("北长_下底") - drr("南长_上底")) + drr("南长_上底") * drr("南长_上底") * drr("南北垂长") * drr("南北垂长") ) _
 - drr("南长_上底") * drr("南北垂长") ) / (drr("北长_下底") - drr("南长_上底"))
End Select

Select Case e.DataCol.Name
    Case "田块名称","南长_上底","北长_下底","南北垂长","应分面积"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [田块名称] = '" & mr("田块名称") & "'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("累计面积") = mr("应分面积")
            mr("户分垂长") = mr("垂长累计")
            mr("实分面积") = mr("验证面积")
            mr("户分东长") = mr("东长累计")
            mr("户分西长") = mr("西长累计")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [田块名称] = '" & dr("田块名称") & "'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("累计面积") = drs(i-1)("累计面积") + drs(i)("应分面积")
            drs(i)("户分垂长") = drs(i)("垂长累计") - drs(i-1)("垂长累计")
            drs(i)("实分面积") = drs(i)("验证面积") - drs(i-1)("验证面积")
            drs(i)("户分东长") = drs(i)("东长累计") - drs(i-1)("东长累计")
            drs(i)("户分西长") = drs(i)("西长累计") - drs(i-1)("西长累计")
        Next
        If e.DataCol.Name = "田块名称" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [田块名称] = '" & e.OldValue & "'", "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[田块名称] = '" & e.OldValue & "'", "[_SortKey]")
                If dr IsNot Nothing Then
                    dr("累计面积") = dr("应分面积")
                    dr("户分垂长") = dr("垂长累计")
                    dr("实分面积") = dr("验证面积")
                    dr("户分东长") = dr("东长累计")
                    dr("户分西长") = dr("西长累计")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [田块名称] = '" & dr("田块名称") & "'", "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("累计面积") = drs(i-1)("累计面积") + drs(i)("应分面积")  
                    drs(i)("户分垂长") = drs(i)("垂长累计") - drs(i-1)("垂长累计")
                    drs(i)("实分面积") = drs(i)("验证面积") - drs(i-1)("验证面积")
                    drs(i)("户分东长") = drs(i)("东长累计") - drs(i-1)("东长累计")
                    drs(i)("户分西长") = drs(i)("西长累计") - drs(i-1)("西长累计")
                Next
            End If
        End If
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
kylin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 F6
等级:狐精 帖子:3030 积分:19188 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2013/6/3 8:46:00 [只看该作者]

这个需要你做个实例发上来,大家才可以帮你测试和发现问题。
数据就模拟一些会出现这样问题的数据就可以了。

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/6/3 8:46:00 [只看该作者]

能不能上个例子? 另外你是点击第一次重置没有计算?还是计算错误?  

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/6/3 8:46:00 [只看该作者]

没有例子? 也不做任何解释?

什么列输入数据? 在什么列得出计算结果? 第一次得出的错误结果是什么? 第二次重置后得出的正确的结果是社么?


 回到顶部
帅哥哟,离线,有人找我吗?
xzc1221
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:46 积分:496 威望:0 精华:0 注册:2012/8/21 21:47:00
  发帖心情 Post By:2013/6/3 21:57:00 [只看该作者]

'这样写后正确了,是计算顺序错误引起的。谢谢大家的关心!

Select Case e.DataCol.Name
    Case "田块名称","应分面积"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [田块名称] = '" & mr("田块名称") & "'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("累计面积") = mr("应分面积")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [田块名称] = '" & dr("田块名称") & "'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("累计面积") = drs(i-1)("累计面积") + drs(i)("应分面积")
        Next
        If e.DataCol.Name = "田块名称" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [田块名称] = '" & e.OldValue & "'", "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[田块名称] = '" & e.OldValue & "'", "[_SortKey]")
                If dr IsNot Nothing Then
                    dr("累计面积") = dr("应分面积")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [田块名称] = '" & dr("田块名称") & "'", "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("累计面积") = drs(i-1)("累计面积") + drs(i)("应分面积")  
                Next
            End If
        End If


'对某列开平方

    Case "南长_上底","北长_下底","南北垂长","累计面积"
       If e.DataRow("南长_上底") = e.DataRow("北长_下底") Then
         e.DataRow("垂长累计")  = e.DataRow("累计面积") / e.DataRow("南长_上底")
       Else
               '对某列开平方
          e.DataRow("垂长累计") =( Math.Sqrt(2 * e.DataRow("累计面积") * e.DataRow("南北垂长") * (e.DataRow("北长_下底") - e.DataRow("南长_上底")) + e.DataRow("南长_上底") * e.DataRow("南长_上底") * e.DataRow("南北垂长") * e.DataRow("南北垂长") ) _
 - e.DataRow("南长_上底") * e.DataRow("南北垂长") ) / (e.DataRow("北长_下底") - e.DataRow("南长_上底"))
      End If

 

    Case "田块名称","东长","西长","垂长累计"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [田块名称] = '" & mr("田块名称") & "'", "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("户分垂长") = mr("垂长累计")
            mr("实分面积") = mr("验证面积")
            mr("户分东长") = mr("东长累计")
            mr("户分西长") = mr("西长累计")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [田块名称] = '" & dr("田块名称") & "'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("户分垂长") = drs(i)("垂长累计") - drs(i-1)("垂长累计")
            drs(i)("实分面积") = drs(i)("验证面积") - drs(i-1)("验证面积")
            drs(i)("户分东长") = drs(i)("东长累计") - drs(i-1)("东长累计")
            drs(i)("户分西长") = drs(i)("西长累计") - drs(i-1)("西长累计")
        Next
        If e.DataCol.Name = "田块名称" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [田块名称] = '" & e.OldValue & "'", "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[田块名称] = '" & e.OldValue & "'", "[_SortKey]")
                If dr IsNot Nothing Then
                    dr("户分垂长") = dr("垂长累计")
                    dr("实分面积") = dr("验证面积")
                    dr("户分东长") = dr("东长累计")
                    dr("户分西长") = dr("西长累计")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [田块名称] = '" & dr("田块名称") & "'", "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("户分垂长") = drs(i)("垂长累计") - drs(i-1)("垂长累计")
                    drs(i)("实分面积") = drs(i)("验证面积") - drs(i-1)("验证面积")
                    drs(i)("户分东长") = drs(i)("东长累计") - drs(i-1)("东长累计")
                    drs(i)("户分西长") = drs(i)("西长累计") - drs(i-1)("西长累计")
                Next
            End If
        End If
End Select


 回到顶部