以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 表第一次加载出来后,使用遍历全选,会有一行选不上,不知道为啥,很诡异 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=118344) |
-- 作者:chen37280600 -- 发布时间:2018/4/30 10:17:00 -- 表第一次加载出来后,使用遍历全选,会有一行选不上,不知道为啥,很诡异 我的表使用动态加载。第一次加载SIteminfo这个表,然后我启动表的多选,然后全选,会有一行没有被选上,很奇怪。
启动表多选的代码: Tables("SItemInfo").ShowCheckBox = e.Sender.Checked
全选代码:(我的按钮名称写“全选/反选”,但我没有添加反选代码) For Each r As Row In Tables("SItemInfo").rows
全选按钮结果:
1如果我点击分类,加载其他的数据,再去全选又没有问题了。 2我还试过用倒序遍历全选,也一样会出现。 3出现这个情况后,我不重新加载数据,我点击第二行或者第四第五行,再全选,没用还是漏了。只有我点击了一下那个被漏选的行,然后点一下全选,它才会被选上! 4有时候,第一次加载这个表数据,数据有几十行的时候,还会出现第一行,第4或第5行左右(反正不知名的某一行),和最后一行,没有被选上的诡异情况。
我的表的Afterload里有段这样的代码,不知道是否有影响
\'表滚动条默认最左边--- [此贴子已经被作者于2018/4/30 10:21:09编辑过]
|
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2019/1/9 11:24:00 -- 回复:(有点甜)For i As Integer = 0 To Tables("SI... 这种全选方式,只能在CurrentChanged没有事件的表里使用。如果有事件,那会非常卡的,有更好的解决方法吗? |
-- 作者:有点甜 -- 发布时间:2019/1/9 11:37:00 -- 以下是引用chen37280600在2019/1/9 11:24:00的发言:
这种全选方式,只能在CurrentChanged没有事件的表里使用。如果有事件,那会非常卡的,有更好的解决方法吗?
加上systemready
systemready = False |
-- 作者:chen37280600 -- 发布时间:2019/1/10 14:50:00 -- 这个SystemReady是有什么作用的?好像百度也找不到,能大概说说吗?它可以停止狐表的表事件执行? |
-- 作者:chen37280600 -- 发布时间: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编辑过]
|
-- 作者:有点甜 -- 发布时间:2019/1/10 15:24:00 -- 以下是引用chen37280600在2019/1/10 14:50:00的发言:
这个SystemReady是有什么作用的?好像百度也找不到,能大概说说吗?它可以停止狐表的表事件执行?
http://www.foxtable.com/webhelp/scr/2218.htm
|
-- 作者:有点甜 -- 发布时间:2019/1/10 15:25:00 -- 以下是引用chen37280600在2019/1/10 14:52:00的发言:
我发现用Position去选择行,它会一直往下滚动选中行,勾选行。如果行数少就没所谓,如果行多,就很麻烦了,一直这样切换下去, 虽然可以通过StopRedraw解决,但是有更好的方法吗?
把某个字段,升、降排序(排序两次),也可以绕过这个bug
|
-- 作者:zhy400137 -- 发布时间:2019/1/11 5:28:00 -- mark |
-- 作者:chen37280600 -- 发布时间:2019/1/11 12:00:00 -- 回复:(有点甜)以下是引用chen37280600在2019/1/10 ... 好,确实绕开了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 |