Foxtable(狐表)用户栏目专家坐堂 → 移动行


  共有6630人关注过本帖树形打印复制链接

主题:移动行

美女呀,离线,留言给我吧!
采菊东篱下
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
移动行  发帖心情 Post By:2022/12/5 11:40:00 [只看该作者]

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


如果临时过渡表桌号不为0的个数除2,余数为1,如果临时过渡表最后一行的姓名等于比赛积分表中每一轮桌号不为0,但最后一行没有对手的姓名,则临时过渡表从下向上分析,把最后一个姓名不等于比赛积分表中每一轮桌号不为0,但最后一行没有对手的姓名移到最后一行,我这样写,逐步测试已看到相同的姓名了,唯独移动行没反应。
With Tables("临时过渡取数")
    Dim Names As New List(Of String)
    Dim zhyh As Integer
    If (.rows.count - 3) Mod 2 = 1 Then
        For zhcs As Integer = 1 To 4
            Dim drs As List(Of DataRow) = DataTables("比赛积分").SQLSelect("[团体赛或个人赛] = '个人赛' And [棋赛名称] = '2020年迎春杯' And [分组] = '综合组' And [第几轮比赛] = " & zhcs & " And [桌号] >" & 0)
            If drs.count Mod 2 = 1 Then
                Names.Add(drs(drs.count - 1)("姓名"))
            End If
        Next
        MessageBox.Show(Names.count)
        For Each nm As String In Names
            MessageBox.Show(nm)
        Next
        MessageBox.Show(.rows.count - 3 - 1)
        If Names.Contains(.Rows(.rows.count - 3 - 1)("姓名")) = True Then
            For zhyh = .rows.count - 3 - 2 To 0 Step - 1
                If Names.Contains(.Rows(zhyh)("姓名")) = True Then
                    Continue For
                ElseIf Names.Contains(.Rows(zhyh)("姓名")) = False Then
                    MessageBox.Show(.Rows(zhyh)("姓名"))
                    Exit For
                End If
                .Rows(zhyh).Move(.rows.count - 3 - 1)
            Next
        End If
    End If
End With
[此贴子已经被作者于2022/12/5 11:40:53编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/5 12:03:00 [只看该作者]

Continue For和Exit For后面的代码都不会执行的,考虑把移动行的代码放到Continue For或者Exit For前面。至于放到哪个前面,自己试把,您的业务逻辑我没看懂

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/12/5 12:37:00 [只看该作者]

With Tables("临时过渡取数")
    Dim Names As New List(Of String)
    Dim zhyh As Integer
    If (.rows.count - 3) Mod 2 = 1 Then
        For zhcs As Integer = 1 To 4
            Dim drs As List(Of DataRow) = DataTables("比赛积分").SQLSelect("[团体赛或个人赛] = '个人赛' And [棋赛名称] = '2020年迎春杯' And [分组] = '综合组' And [第几轮比赛] = " & zhcs & " And [桌号] >" & 0)
            If drs.count Mod 2 = 1 Then
                Names.Add(drs(drs.count - 1)("姓名"))'添加比赛积分表每一轮最后一行没有对手的集合成员
            End If
        Next
        '        MessageBox.Show(Names.count)'注识的代码是方便查看比赛积分表每一轮没对手的具体姓名,测试后不需要这代码的。
        '        For Each nm As String In Names
        '            MessageBox.Show(nm)
        '        Next
        '        MessageBox.Show(.rows.count - 3 - 1)
        If Names.Contains(.Rows(.rows.count - 3 - 1)("姓名")) = True Then'如果Names集合包含临时过渡取数表桌号不为0的最后一行姓名
            For zhyh = .rows.count - 3 - 2 To 0 Step - 1'则从临时过渡取数表桌号不为0的最后第二行向上查找
                If Names.Contains(.Rows(zhyh)("姓名")) = True Then'如果Names集合包含临时过渡取数表桌号不为0的这一行姓名,则取消执行这行代码,继续下一行查找。
                    Continue For
                ElseIf Names.Contains(.Rows(zhyh)("姓名")) = False Then
                    '                    MessageBox.Show(.Rows(zhyh)("姓名"))'测试
                    '.Rows(zhyh).Move(.rows.count - 3 - 1)'如果Names集合不包含临时过渡取数表桌号不为0的这一行姓名,则退出循环,把这行姓名移到桌号不为0的最后一行。
                    Exit For
                End If
            Next
            .Rows(zhyh).Move(.rows.count - 3 - 1)'如果Names集合不包含临时过渡取数表桌号不为0的这一行姓名,则退出循环,把这行姓名移到桌号不为0的最后一行,但这行代码无论放在这还是上面注识的地方,都弹窗提示不允许移动行。
        End If
    End If
End With
[此贴子已经被作者于2022/12/5 13:01:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/5 13:33:00 [只看该作者]

有插入行标记(_sortkey)列的表才能移动行:http://www.foxtable.com/webhelp/topics/1791.htm

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/12/5 15:22:00 [只看该作者]

谢谢指教,行了。

 回到顶部