Foxtable(狐表)用户栏目专家坐堂 → 表第一次加载出来后,使用遍历全选,会有一行选不上,不知道为啥,很诡异


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

主题:表第一次加载出来后,使用遍历全选,会有一行选不上,不知道为啥,很诡异

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


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望:0 精华:4 注册:2017/12/31 14:53:00
回复:(chen37280600)回复:(有点甜)以下是引用ch...  发帖心情 Post By:2019/1/13 12:36:00 [只看该作者]

我发现这个代码,引发新的bug。我发现当所有行选上以后,再点击一次不会实现反选,以下红色的代码无效。但是如果去掉蓝色的代码,就没问题


Dim t As Table  = Tables("LoanInfo")

'当前版本直接遍历全选,会有部分行失败,由排序的BUG引发,所以触发一次排序,绕开BUG---
Dim s As String = t.Sort 
t.Sort ="_identify desc"
t.Sort =s
'当前版本直接遍历全选,会有部分行失败,由排序的BUG引发,所以触发一次排序,绕开BUG---

For Each r As Row In t.rows
    If r.Checked =True Then
        r.Checked =False
        MessageBox.show(1)
    Else 
        r.Checked =True
    End If
Next

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/13 21:34:00 [只看该作者]

1、用 for i as integer = 0 to t.rows.count 的方式引用行,设置,是否可以?

 

2、如果不行,那就没办法了,必须设置position来计算index。


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


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望:0 精华:4 注册:2017/12/31 14:53:00
回复:(有点甜)1、用 for i as integer = 0 to t.ro...  发帖心情 Post By:2019/1/14 9:33:00 [只看该作者]

用Position不行,看来只能使用SystemReady的方法去停止遍历了

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


加好友 发短信
等级:二尾狐 帖子:517 积分:4325 威望:0 精华:0 注册:2014/11/26 15:23:00
  发帖心情 Post By:2019/1/14 9:38:00 [只看该作者]

 杰哥NB,这个也试出来了

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


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望:0 精华:4 注册:2017/12/31 14:53:00
回复:(有点甜)1、用 for i as integer = 0 to t.ro...  发帖心情 Post By:2019/1/14 9:48:00 [只看该作者]

在2019.1.4号之前的版本,都有这个问题。给出妥协的代码,此贴可以终结了。以后大家可以用这个代码就好了

-----------------------------------------------
'需求:点击按钮,可以反选所有的行

'思路:
'1用ForEach遍历行去改Check状态,有bug,要使用这种切换Postion的方法改Check状态
'2但是切换Position,会触发CurrentChanged事件,造成性能影响,所以用SystemReady中止事件执行

Dim t As Table = Tables("WHourInfo") '改成你的表名即可
t.StopRedraw '停止表绘制,因为行多会闪烁
SystemReady = False '停止系统事件,这是狐表特有的函数,可以停止系统所有事件的运行

Try
    For i As Integer = 0 To t.Rows.count-1
        t.Position = i
        If t.Rows(i).Checked Then
            t.Rows(i).Checked = False
        Else
            t.Rows(i).Checked = True
        End If
    Next    
Catch ex As Exception
    MessageBox.show("程序发生错误,请联系技术员")
End Try

SystemReady = True '启动系统事件
t.ResumeRedraw '启动表绘制
[此贴子已经被作者于2019/1/14 9:50:50编辑过]

 回到顶部
总数 15 上一页 1 2