以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  再求大神帮忙看一个循环语句错误,在线求解答  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=115159)

--  作者:jq_shang
--  发布时间:2018/3/1 23:36:00
--  再求大神帮忙看一个循环语句错误,在线求解答

Dim i As Integer = 0

\'With Tables("员工表")

With Tables("学员表")

    For Each rrrr As Row In .Rows  \'当前加载已筛选过的员工表中,每一行都去核对

        Dim mmmm As String = .current("培训号")

        If xyjh.Contains(mmmm) = True Then \'找出员工表中已经加入学员表的学员,下一句remove

            .current.Remove

            i = i + 1

        End If

    Next

End With

Output.show(i)

问题出现在最后这个循环语句中,没有将符合条件的所有行移除,而是跳行移除。每次只移除13579……


--  作者:jq_shang
--  发布时间:2018/3/2 0:02:00
--  
Dim i As Integer
\'For Each r As Row In Tables("员工表").Rows
For Each r As Row In Tables("学员表").Rows
    Dim pxh As String = r("培训号")
    With Tables("学员表")
        Dim rn As Integer
        rn = .Find(pxh, 0,"培训号", True, True, True)
        If rn > - 1 Then \'如果找到符合条件的行
            \'.Position = r \'则选择该行
            r.Remove \'在加载的员工表中移除该行,防止再次重复选择
            \'r.Checked = False \'取消员工表中对该行的选择
            
        End If
    End With
    i = i + 1
Next
Output.show(i)

语句改成上面样子,效果一样,还是跳行移除。

--  作者:有点甜
--  发布时间:2018/3/2 1:06:00
--  

参考

 

http://www.foxtable.com/webhelp/scr/1478.htm

 

http://www.foxtable.com/webhelp/scr/2712.htm

 

或者参考 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=114307&skin=0

 


--  作者:jq_shang
--  发布时间:2018/3/2 1:10:00
--  
先谢谢再看!
--  作者:jq_shang
--  发布时间:2018/3/2 1:17:00
--  
我的本意是,重复的选项提前移除,根本就不写入新表中,结果出现了隔行筛选的问题,怎么都找不到错在哪里了。
--  作者:jq_shang
--  发布时间:2018/3/2 1:24:00
--  

出现三个问题:

1、我的本意是,重复的选项提前移除,根本就不写入新表中,结果出现了隔行筛选的问题,怎么都找不到错在哪里了。

2、移除命令,如果不加入括号,就变成删除啦!

3、移除的行,用命令不能重新加载,需要重新打开项目才能加载


--  作者:jq_shang
--  发布时间:2018/3/2 1:56:00
--  
Dim mmmm As String
Dim i As Integer 
问题已找到,先逐个选择,再一起删除就可以了,道理能够自己想明白。

With Tables("员工表")
    For Each rrrr As Row In .Rows  \'当前加载已筛选过的员工表中,每一行都去核对
         mmmm = .current("培训号")
        If xyjh.Contains(mmmm) = True Then \'找出员工表中已经加入学员表的学员,下一句remove掉
            .current.Checked = True
            i = i + 1
        End If
    Next
End With
For Each gtr As Row In Tables("员工表").GetCheckedRows
gtr.Remove()
Next

--  作者:jq_shang
--  发布时间:2018/3/2 2:17:00
--  
后三句应该改成:
Dim gtr As List(of Row) = Tables("员工表").GetCheckedRows
For Each rrr As Row In gtr
rrr.Remove()
Next

--  作者:jq_shang
--  发布时间:2018/3/2 2:35:00
--  
不行呀,测试被屏蔽的还是第一人。难道要再次加入数组、集合后,再逐一屏蔽吗?
--  作者:有点甜
--  发布时间:2018/3/2 8:57:00
--  
以下是引用jq_shang在2018/3/2 2:35:00的发言:
不行呀,测试被屏蔽的还是第一人。难道要再次加入数组、集合后,再逐一屏蔽吗?

 

这个意思?

 

    For Each rrrr As Row In .Rows  \'当前加载已筛选过的员工表中,每一行都去核对
         mmmm = rrrr("培训号")

 

没看懂你要做什么,实现什么。请上传具体实例,说明你要做的东西。

[此贴子已经被作者于2018/3/2 8:59:08编辑过]