以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]正负数  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=71426)

--  作者:江南小城
--  发布时间:2015/7/10 22:58:00
--  [求助]正负数

狐表老师,我要把大于0的前面加上+号小于0的加上-号

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("买入_金额")
            dr = mr
        Else
            mr("仓储_金额") = dr("仓储_金额")
        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)("买入_金额")
        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("买入_金额")
                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)("买入_金额")
                Next
            End If
        End If
End Select


图片点击可在新窗口打开查看此主题相关图片如下:图像 1.png
图片点击可在新窗口打开查看
                                                                                                               谢谢


--  作者:狐狸爸爸
--  发布时间:2015/7/11 8:33:00
--  

 mr("仓储_金额") = mr("卖出_金额") - mr("买入_金额")

 

应该应该改为:

 

 mr("仓储_金额") =  mr("买入_金额") - mr("卖出_金额")


--  作者:江南小城
--  发布时间:2015/7/11 9:12:00
--  
以下是引用狐狸爸爸在2015/7/11 8:33:00的发言:

 mr("仓储_金额") = mr("卖出_金额") - mr("买入_金额")

 

应该应该改为:

 

 mr("仓储_金额") =  mr("买入_金额") - mr("卖出_金额")


图片点击可在新窗口打开查看此主题相关图片如下:图像 2.png
图片点击可在新窗口打开查看

--  作者:狐狸爸爸
--  发布时间:2015/7/11 9:32:00
--  
 设置完成代码之后,要重置一下列股票名称列,以便根据新的代码重算一次。

 

--  作者:江南小城
--  发布时间:2015/7/11 10:18: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("买入_金额") - mr("卖出_金额")
           
           
            dr = mr
        Else
            mr("仓储_金额") = dr("仓储_金额")
        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)("买入_金额")
        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("买入_金额")
                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)("买入_金额")
                Next
            End If
        End If
End Select

图片点击可在新窗口打开查看此主题相关图片如下:图像 3.png
图片点击可在新窗口打开查看

--  作者:狐狸爸爸
--  发布时间:2015/7/11 10:54:00
--  

 编程是严谨的,我告诉你:

 

 mr("仓储_金额") = mr("卖出_金额") - mr("买入_金额")

应该应该改为:

 mr("仓储_金额") =  mr("买入_金额") - mr("卖出_金额")

 

可是你五楼的代码中,有一处是:

 mr("仓储_金额") =  mr("买入_金额") - mr("卖出_金额")

有三处是:

drs(i)("仓储_金额") = drs(i-1)("仓储_金额") + drs(i)("卖出_金额") - drs(i)("买入_金额")
dr("仓储_金额") = dr("卖出_金额") - dr("买入_金额")

drs(i)("仓储_金额") = drs(i-1)("仓储_金额") + drs(i)("卖出_金额") - drs(i)("买入_金额")

 

 

至少你得统一算法吧? 到底是“买入 - 卖出”,还是“卖出 -买入”,你最清楚,根据你的图片,应该全是“卖出 - 买入”,统一改过来。

[此贴子已经被作者于2015/7/11 10:53:50编辑过]

--  作者:狐狸爸爸
--  发布时间:2015/7/11 10:55: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("买出_金额") - mr("卖入_金额")
            dr = mr
        Else
            mr("仓储_金额") = dr("仓储_金额")
        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)("买入_金额")
        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("买入_金额")
                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)("买入_金额")
                Next
            End If
        End If
End Select


--  作者:狐狸爸爸
--  发布时间:2015/7/11 11:01:00
--  

你一楼的要求和五楼的要求是矛盾的,你知道吗?

 

一楼要得到整数,必须:买入-卖出 

五楼要得到负数,必须:卖出-买入

 

自己先理清楚思路,然后修改代码。


--  作者:江南小城
--  发布时间:2015/7/11 11:31:00
--  
老师,仓储_金额=买入_数量*买入_平均价,此时仓储_金额列是等于正数。卖出时低于买入_平均价此时仓储_金额列的数据应该是负数
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:股票管理.rar


--  作者:狐狸爸爸
--  发布时间:2015/7/11 11:43:00
--  

 我不炒股,所以不懂你的算法,请描述一下

 

为啥1楼应该是1000,5楼应该是-100