以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何实现表A的效果(已解决)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=86533)

--  作者:yyzlxc
--  发布时间:2016/6/20 9:10:00
--  [求助]如何实现表A的效果(已解决)
要求根据各产品编号自上而下累计出现的次数,在产品累计列进行逐行填充,实现如表A的效果。请各位老师指教,谢谢!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目23.foxdb


[此贴子已经被作者于2016/6/20 11:23:59编辑过]

--  作者:大红袍
--  发布时间:2016/6/20 9:26:00
--  

 参考

 

http://www.foxtable.com/help/topics/1572.htm

 


--  作者:yyzlxc
--  发布时间:2016/6/20 9:45:00
--  
谢谢大红袍老师的回复,用流水账代码来实现,需要增加一列,觉得有点繁琐。如何在不增加列的情况下,用一段按钮代码来实现上述效果,还请大红袍老师赐教,谢谢!!
--  作者:大红袍
--  发布时间:2016/6/20 9:52:00
--  

Select Case e.DataCol.Name
    Case "产品编号"
        Dim drs As List(of DataRow)
        Dim Filter As String
        Filter = "[_SortKey] >= " & e.DataRow("_SortKey") & " And [产品编号] = \'" & e.DataRow("产品编号") & "\'"
        drs = e.DataTable.Select(Filter)
        For Each dr As DataRow In drs
            Filter = "[_SortKey] <= " & dr("_SortKey") & " And [产品编号] = \'" & dr("产品编号") & "\'"
            dr("产品累计") = e.DataTable.Compute("count(产品编号)",Filter)
        Next
        If e.DataCol.Name = "产品编号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            Filter = "[_SortKey] > " & e.DataRow("_SortKey") & " And [产品编号] = \'" & e.OldValue & "\'"
            drs = e.DataTable.Select(Filter)
            For Each dr As DataRow In drs
                Filter = "[_SortKey] <= " & dr("_SortKey") & " And [产品编号] = \'" & dr("产品编号") & "\'"
                dr("产品累计") = e.DataTable.Compute("count(产品编号)",Filter)
            Next
        End If
End Select


--  作者:yyzlxc
--  发布时间:2016/6/20 10:24:00
--  
谢谢大红袍老师的赐教,我把DataColChanged事件代码改成按钮代码,前半段代码可以实现所需效果。那么后半段代码(代码屏蔽部分)有什么作用?如何将其改成按钮代码,还请大红袍老师指教,再次衷心感谢!!

For Each dr1 As DataRow In DataTables("表A").DataRows
    Dim drs As List(of DataRow)
    Dim Filter As String
    Filter = "[_SortKey] >= " & dr1("_SortKey") & " And [产品编号] = \'" & dr1("产品编号") & "\'"
    drs = DataTables("表A").Select(Filter)
    For Each dr As DataRow In drs
        Filter = "[_SortKey] <= " & dr("_SortKey") & " And [产品编号] = \'" & dr("产品编号") & "\'"
        dr("产品累计2") = DataTables("表A").Compute("count(产品编号)",Filter)
    Next
    \'If e.DataCol.Name = "产品编号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
        \'Filter = "[_SortKey] > " & dr1("_SortKey") & " And [产品编号] = \'" & e.OldValue & "\'"
        \'drs = DataTables("表A").Select(Filter)
        \'For Each dr As DataRow In drs
            \'Filter = "[_SortKey] <= " & dr("_SortKey") & " And [产品编号] = \'" & dr("产品编号") & "\'"
            \'dr("产品累计2") = DataTables("表A").Compute("count(产品编号)",Filter)
        \'Next
    \'End If
Next
[此贴子已经被作者于2016/6/20 10:25:30编辑过]

--  作者:大红袍
--  发布时间:2016/6/20 10:27:00
--  

方法一:重置列

 

http://www.foxtable.com/help/topics/1587.htm

 


--  作者:大红袍
--  发布时间:2016/6/20 10:31:00
--  
For Each bh As String In DataTables("表A").GetValues("产品编号")
    Dim drs As List(of DataRow)
    Dim Filter As String
    Filter = "[产品编号] = \'" & bh & "\'"
    drs = DataTables("表A").Select(Filter,"_Sortkey")
    For i As Integer = 0 To drs.count-1
        drs(i)("产品累计") = i+1
    Next
Next
[此贴子已经被作者于2016/6/20 10:38:56编辑过]

--  作者:yyzlxc
--  发布时间:2016/6/20 10:37:00
--  
代码进一步简化,完全符合所需效果,感谢大红袍老师的热心赐教,衷心感谢!!
--  作者:大红袍
--  发布时间:2016/6/20 10:39:00
--  
写错了一点,重新看7楼。
--  作者:yyzlxc
--  发布时间:2016/6/20 11:24:00
--  
完美解决,谢谢大红袍老师!!