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


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

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

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


加好友 发短信
等级:六尾狐 帖子:1279 积分:7959 威望:0 精华:4 注册:2017/12/31 14:53:00
表第一次加载出来后,使用遍历全选,会有一行选不上,不知道为啥,很诡异  发帖心情 Post By:2018/4/30 10:17:00 [只看该作者]

我的表使用动态加载。第一次加载SIteminfo这个表,然后我启动表的多选,然后全选,会有一行没有被选上,很奇怪。

 

启动表多选的代码:

Tables("SItemInfo").ShowCheckBox = e.Sender.Checked

 

全选代码:(我的按钮名称写“全选/反选”,但我没有添加反选代码)

For Each r As Row In Tables("SItemInfo").rows
        r.Checked =True
Next

 

全选按钮结果:


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

 

1如果我点击分类,加载其他的数据,再去全选又没有问题了。

2我还试过用倒序遍历全选,也一样会出现。

3出现这个情况后,我不重新加载数据,我点击第二行或者第四第五行,再全选,没用还是漏了。只有我点击了一下那个被漏选的行,然后点一下全选,它才会被选上!

4有时候,第一次加载这个表数据,数据有几十行的时候,还会出现第一行,第4或第5行左右(反正不知名的某一行),和最后一行,没有被选上的诡异情况。

 

我的表的Afterload里有段这样的代码,不知道是否有影响

 

    '表滚动条默认最左边---
    Dim gt As Table =   Tables(e.DataTable.Name)
    If gt.Rows.Count > 0 Then
        gt.Select(0,0)
    End If
    '表滚动条默认最左边---

[此贴子已经被作者于2018/4/30 10:21:09编辑过]

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


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

For i As Integer = 0 To Tables("SItemInfo").rows.count-1
    Tables("SItemInfo").Position = i
    Tables("SItemInfo").rows(i).checked = True
Next

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


加好友 发短信
等级:六尾狐 帖子:1279 积分:7959 威望:0 精华:4 注册:2017/12/31 14:53:00
回复:(有点甜)For i As Integer = 0 To Tables("SI...  发帖心情 Post By:2019/1/9 11:24:00 [只看该作者]

这种全选方式,只能在CurrentChanged没有事件的表里使用。如果有事件,那会非常卡的,有更好的解决方法吗?

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


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

以下是引用chen37280600在2019/1/9 11:24:00的发言:
这种全选方式,只能在CurrentChanged没有事件的表里使用。如果有事件,那会非常卡的,有更好的解决方法吗?

 

加上systemready

 

systemready = False
For i As Integer = 0 To Tables("SItemInfo").rows.count-1
    Tables("SItemInfo").Position = i
    Tables("SItemInfo").rows(i).checked = True
Next
systemready = True


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


加好友 发短信
等级:六尾狐 帖子:1279 积分:7959 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/1/10 14:50:00 [只看该作者]

这个SystemReady是有什么作用的?好像百度也找不到,能大概说说吗?它可以停止狐表的表事件执行?

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


加好友 发短信
等级:六尾狐 帖子:1279 积分:7959 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/1/10 14:52:00 [只看该作者]

我发现用Position去选择行,它会一直往下滚动选中行,勾选行。如果行数少就没所谓,如果行多,就很麻烦了,一直这样切换下去,

虽然可以通过StopRedraw解决,但是有更好的方法吗?

顺便贴出我的完整代码,给其他人用

--------------------------------------------------
'用ForEach遍历行去改Check状态,有bug,要使用这种切换Postion的方法改Check状态
'SystemReady是狐表一个底层函数,可以停止系统所有事件的运行
Dim t As Table = Tables("ItemInfo")
t.StopRedraw '停止表绘制,因为行多会闪烁
SystemReady = False '停止系统事件

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

SystemReady = True '启动系统事件
t.ResumeRedraw '启动表绘制


[此贴子已经被作者于2019/1/10 15:06:00编辑过]

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


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

以下是引用chen37280600在2019/1/10 14:50:00的发言:
这个SystemReady是有什么作用的?好像百度也找不到,能大概说说吗?它可以停止狐表的表事件执行?

 

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

 


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


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

以下是引用chen37280600在2019/1/10 14:52:00的发言:
我发现用Position去选择行,它会一直往下滚动选中行,勾选行。如果行数少就没所谓,如果行多,就很麻烦了,一直这样切换下去,

虽然可以通过StopRedraw解决,但是有更好的方法吗?

 

把某个字段,升、降排序(排序两次),也可以绕过这个bug

 


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


加好友 发短信
等级:五尾狐 帖子:1133 积分:8227 威望:0 精华:0 注册:2013/11/3 19:00:00
  发帖心情 Post By:2019/1/11 5:28:00 [只看该作者]

mark

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


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

好,确实绕开了bug,现在给出完整代码,方便其他网友
--------------------------------------------

Dim t As Table  = Tables("ItemInfo")

'当前版本直接遍历全选,会有部分行失败,由排序的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 Then
        r.Checked =False
    Else 
        r.Checked =True
    End If
Next

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