以文本方式查看主题

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

--  作者:jq_shang
--  发布时间:2021/2/13 5:22:00
--  数据表移动行排序遇到问题请教

作为老年新手,大年初一晚上通宵不睡,解决不了以下问题,特此请教专家大咖:

数据表行排序,采用移动行位置的方式,代码在命令窗口运行没问题。在程序窗口中打开后,运行经常出错。通过观察发现,如果用鼠标任意点击一下table,运行就能正常。如果不点击,则不能正常进行排序。代码中加入表格选择相关命令,也不能解决问题。代码如下:

 

Dim c As Integer = Tables("当日积分表").Rows.count()
For j As Integer = 0 To c-1 \'如果有15行,则只需要用下面14行来比较冒泡.15行循环14次.循环次数=行数-1
    For i As Integer = c-1 To 1 Step -1 \'内循环,第一层冒泡,从最后一行开始.i = 当前行的序号
        Dim dqh As Row = Tables("当日积分表").Rows(i) \'当前行
        If dqh("计工") = False Then \'如果计工无效,则退出,不继续计算,开始倒数第二行的比较
            Continue For  \'Exit For
        Else
            Tables("当日积分表").Position = i
            Dim n As Integer = Tables("当日积分表").Position
            Dim bjh As Row = Tables("当日积分表").Rows(i-1) \'比较行
            If bjh("计工") = False  OrElse dqh("原始名次") < bjh("原始名次") Then
                Syscmd.Row.MoveUp()\'选择当前行,并上移
            End If
        End If
    Next
    Tables("当日积分表").Position = c-1
Next


--  作者:xongyijd
--  发布时间:2021/2/13 11:55:00
--  
移动行怎么麻烦吗?我这样你参考一下
Dim dtb As New DataTableBuilder("列设置") \'增加临时表绑定
dtb.AddDef("顺序", Gettype(Integer))
dtb.AddDef("_SortKey", Gettype(Double))
dtb.AddDef("_Identify", Gettype(Integer))
dtb.AddDef("列名称", Gettype(String), 30)
dtb.AddDef("列宽", Gettype(Integer))
dtb.AddDef("显示", Gettype(Boolean))
du1.Table.DataSource =dtb.BuildDataSource()

Dim du1 As WinForm.Table = e.Form.Controls("Table1")
Select Case e.StripItem.Name
   Case "下移"
        If du1.Table.Current IsNot Nothing Then
            du1.Table.Current.Move(du1.Table.Position + 1)
        End If
        For Each dt As Row In du1.Table.Rows
            dt("顺序")= dt.Index+1
        Next
    Case "上移"
        If du1.Table.Current IsNot Nothing Then
            du1.Table.Current.Move(du1.Table.Position - 1)
        End If
        For Each dt As Row In du1.Table.Rows
            dt("顺序")= dt.Index+1
        Next
主要的是要增加_SortKey列


--  作者:jq_shang
--  发布时间:2021/2/13 16:43:00
--  
谢谢您啊!
--  作者:jq_shang
--  发布时间:2021/2/13 19:05:00
--  
不好意思,我的上述代码逻辑一塌糊涂。我还没有弄明白冒泡逻辑呢。
--  作者:jq_shang
--  发布时间:2021/2/14 15:15:00
--  
 

问题已解决,谢谢各位!