以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  筛选、排序后编号  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=159383)

--  作者:13796361423
--  发布时间:2020/12/24 13:32:00
--  筛选、排序后编号
Select e.DataCol.Name
    Case "编号"
        If e.DataRow.IsNull("编号") Then
            e.DataRow("序号学校") = Nothing
        Else
            Dim lb As String = e.DataRow("编号")
            If e.DataRow("序号学校").StartsWith(lb) = False \'如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(序号学校)","编号 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(2,4)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("序号学校") = lb & Format(idx,"0000")
            End If
        End If
End Select



以上命令是给每个学生编号、 可以当我把筛选后,把姓名按照音序排序后, 再重新编号后,还是排序前的编号, 这个编号不能重新更新吗?   有什么办法可以筛选、排序后重新编号?

--  作者:有点蓝
--  发布时间:2020/12/24 13:39:00
--  
筛选不行的,改为按条件加载:http://www.foxtable.com/webhelp/topics/1928.htm
--  作者:13796361423
--  发布时间:2020/12/24 14:16:00
--  这样可以吗?
DataTables("小学学籍库").LoadOrder = "姓名"
DataTables(
"小学学籍库").Load

我这样可以不?  先把姓名排序, 然后再编号?

--  作者:有点蓝
--  发布时间:2020/12/24 14:26:00
--  
DataTables("小学学籍库").LoadFilter = "某实筛选条件"
DataTables("小学学籍库").Load

排序要使用sort,这里也不需要排序,改改代码即可

max = e.DataTable.Compute("Max(序号学校)","编号 = \'" & lb & "\' and 姓名 <= \'" & e.DataRow("姓名") & "\' And [_Identify] <> " & e.DataRow("_Identify"))

--  作者:13796361423
--  发布时间:2020/12/24 15:06:00
--  加载后
请问加载完之后如何回到以前的表?
--  作者:有点蓝
--  发布时间:2020/12/24 15:10:00
--  
DataTables("小学学籍库").LoadFilter = ""
DataTables("小学学籍库").Load

--  作者:13796361423
--  发布时间:2020/12/24 15:52:00
--  请问为什么会有两个一样的号?
Select e.DataCol.Name
    Case "编号"
        If e.DataRow.IsNull("编号") Then
            e.DataRow("序号学校") = Nothing
        Else
            Dim lb As String = e.DataRow("编号")
            If e.DataRow("序号学校").StartsWith(lb) = False \'如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(序号学校)","编号 = \'" & lb & "\' and 学生姓名 <= \'" & e.DataRow("学生姓名") & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(2,4)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("序号学校") = lb & Format(idx,"0000")
            End If
        End If
End Select
图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20201224155008.jpg
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2020/12/24 16:01:00
--  
筛选了一部分数据,重新编号;然后又筛选另一部分数据重新编号,肯定有重复的呀。是不是业务没有理清楚?