Foxtable(狐表)用户栏目专家坐堂 → 再求大神帮忙看一个循环语句错误,在线求解答


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

主题:再求大神帮忙看一个循环语句错误,在线求解答

帅哥哟,离线,有人找我吗?
jq_shang
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
再求大神帮忙看一个循环语句错误,在线求解答  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
  发帖心情 Post By: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)

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

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


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
  发帖心情 Post By:2018/3/2 1:10:00 [显示全部帖子]

先谢谢再看!

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


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
  发帖心情 Post By:2018/3/2 1:17:00 [显示全部帖子]

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

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


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
  发帖心情 Post By:2018/3/2 1:24:00 [显示全部帖子]

出现三个问题:

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

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

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


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


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
  发帖心情 Post By:2018/3/2 2:35:00 [显示全部帖子]

不行呀,测试被屏蔽的还是第一人。难道要再次加入数组、集合后,再逐一屏蔽吗?

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


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
  发帖心情 Post By:2018/3/3 12:05:00 [显示全部帖子]

问题补充说明:
目的:
1、在培训班次中,加入学员,想通过窗口实现;
2、已有的表:员工表、培训班次(表)、学员表;
3、学员表的字段中,班次ID和学员ID(此处暂时为“学员号”)本身单列都可以重复,但是,同一班次ID中,不准出现重复的学员号;
当前进展情况:
1、窗口布局为:左侧为部门目录树,中部为按部门筛选的员工表table,右侧部分为各种标签,显示期次信息、班次信息、已有几名学员,当前选择几名学员等,然后是几个按钮;目录树节点通过双击事件,筛选列出员工表中的员工名单用于学员待选。
2、按钮“加入学员”中的dlk事件代码,通过FIND 语句,已经能够拒绝写入重复学员,并给出相应标签信息。
问题出现的过程:
1、“加入学员”按钮代码中,写入了remove语句,可以在加入学员的同时,移除中间员工表中已经加入班次的员工;
2、实际应用情况下,班次中,可能二次加入学员。这样,在重新打开项目的时候,中间的表中,必然会出现已经移除的员工,造成加入学员可能重复选择(也仅仅是重复选择而已,因为加入过程中,重复学员仍然可以被过滤掉);
3、我想在中间加载的表中,加入一些判断,使得本班学员表中已有的学员,不得重复出现于员工表中,提前避免重复选择;
4、问题描述到这里,突然发现可以在筛选语句中加入AND条件,即可实现;
5、我用的是笨办法,在简单的部门员工筛选并加载员工表后,想要通过复杂的循环语句去核对当前部门的每一个员工,是否已经存在于班次表中,如果存在,即用remove语句移除;
问题的表现:
1、二次筛选的循环语句,出现了跳行移除。考虑原因,是对每一个已有学员先执行了remove,表中记录出现了向上的错位引起;
2、我想先对筛选出来的员工,先逐一设置checked选择标记,最后再一次性移除,结果这个标记只能选择一个,后续选择的全部无效,最终只能移除一人;
其他连带问题:
已经移除的员工,不能通过命令重新加载到员工表中,只有在项目重启之后才能加载,不知道是错在了哪里。
我是个白毛,完全依靠帮助文件摸索着边学习边练习开发,当前,正在仔细查找帮助文件,正在从基本的tatetable从头看起,感觉很吃力。用系统示例中的listview第25例,可以解决这个问题,但我还暂时没有考虑使用这个listview。


 回到顶部