以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 移动行 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=184389) |
||||
-- 作者:采菊东篱下 -- 发布时间:2022/12/5 11:40:00 -- 移动行
如果临时过渡表桌号不为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编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2022/12/5 12:03:00 -- Continue For和Exit For后面的代码都不会执行的,考虑把移动行的代码放到Continue For或者Exit For前面。至于放到哪个前面,自己试把,您的业务逻辑我没看懂 |
||||
-- 作者:采菊东篱下 -- 发布时间: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编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2022/12/5 13:33:00 -- 有插入行标记(_sortkey)列的表才能移动行:http://www.foxtable.com/webhelp/topics/1791.htm |
||||
-- 作者:采菊东篱下 -- 发布时间:2022/12/5 15:22:00 -- 谢谢指教,行了。 |