以文本方式查看主题

-  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=160769)

--  作者:宇哥
--  发布时间:2021/2/20 22:39:00
--  移动行的时候,实现靠前排序的问题
上下移动行按钮事件:
靠上行的单位,单位排序靠前,应该用什么参数返回?

\'========================读部门排序===========================
DataTables("部门表").StopRedraw()
With CurrentTable
    .Current.Move(.Position - 1)
End With
Dim wz As Integer = CurrentTable.Position
Dim i As Integer
CurrentTable.Position= 0
For i = 1 To CurrentTable.Count 
    \'  CurrentTable(i-1,"排序") = i \'逐行写入行号
    Tables("部门表").Rows(i-1)("部门排序") = i

Next
\'=======================读单位排序 ===========================
Dim vals As List(Of String) = DataTables("部门表").GetValues("单位")
Dim val As String = Tables("部门表").Current("单位")
Dim ii As Integer = vals.Indexof( val )
If ii >= 0
Tables("部门表").Current("单位排序") = ii+1 \'这里没有办法按照靠前优先进行排序
End If

DataTables("部门表").ResumeRedraw()
CurrentTable.Position = wz

--  作者:有点蓝
--  发布时间:2021/2/21 19:44:00
--  
没看懂什么意思,截图说明一下
--  作者:宇哥
--  发布时间:2021/2/21 21:23:00
--  
蓝老师:已经改了,不过两次循环很卡,怎么优化一下

\'========================读部门排序===========================
DataTables("部门表").StopRedraw()
With CurrentTable
    .Current.Move(.Position - 1)
End With
Dim wz As Integer = CurrentTable.Position


Dim i As Integer
CurrentTable.Position= 0
For i = 1 To CurrentTable.Count
    \'  CurrentTable(i-1,"排序") = i \'逐行写入行号
    Tables("部门表").Rows(i-1)("部门排序") = i
    
Next

CurrentTable.Position = wz
\'========================读单位排序===========================
Dim 单位组 As List(Of String)
单位组 = DataTables("部门表").GetValues("单位","","部门排序") \'列名用符号|分割
Dim ii As  Integer
Dim iii As  Integer

For Each 单位名 As String In 单位组
    ii =  单位组.Indexof(单位名)
    For Each dr As DataRow In DataTables("部门表").DataRows
        If 单位名 = dr("单位")
            \'Tables("部门表").Rows(iii-1)("部门排序") = (ii+1)*1000 + iii
            dr("部门排序")=(ii+1)*1000+ dr("部门排序")
        End If
    Next
Next
CurrentTable.Position = wz

--  作者:有点蓝
--  发布时间:2021/2/21 21:34:00
--  
没看懂代码表达的意思,请截图表格数据说明一下
--  作者:宇哥
--  发布时间:2021/2/22 10:12:00
--  
点击上下排序按钮,自动按单位、部门靠前的顺序生成:部门排序列,动画演示如下:

功能实现了,代码执行太卡


图片点击可在新窗口打开查看此主题相关图片如下:简单演示33.gif
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2021/2/22 10:27:00
--  
排序规则是什么?为什么可以从3004变为2003?
--  作者:宇哥
--  发布时间:2021/2/22 10:32:00
--  
getvalues单位列得出靠前的第几个单位顺序,加上部门列靠前顺序
002003  就是第2个单位,第3个部门

--  作者:有点蓝
--  发布时间:2021/2/22 11:32:00
--  
With CurrentTable
    If .Position > 0
        .Current.Move(.Position - 1)
        Dim r As Row = .Rows(.Position)
        Dim ps As List(Of String)= DataTables("表A").GetValues("单位","","_sortkey")
        For i As Integer = r.Index To .Rows.count - 1
            .Rows(i)("部门排序") = (ps.Indexof(.Rows(i)("单位")) +1) * 1000 + i+1
        Next
    End If
End With


--  作者:宇哥
--  发布时间:2021/2/22 13:10:00
--  
这也太厉害了吧!666666 虽然那几行代码读不懂
--  作者:有点蓝
--  发布时间:2021/2/22 13:35:00
--  
那就多看看编程基础。都是基础的语法