以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 早期版本的复选框问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=186800) |
-- 作者:rogen -- 发布时间:2023/5/30 14:47:00 -- 早期版本的复选框问题 我一直用的2018版,有个bug 开启table的复选后,全选、反选不能精确的选择全部或者反选, 我写的全选代码如下,偶尔会有记录漏选的情况: Dim t As Table = Tables(e.Form.name & "_明细表") For i As Integer = t.Rows.Count -1 To 0 Step -1 t.Rows(i).Checked = True Next 反选: Dim t As Table = Tables(e.Form.name & "_明细表") For i As Integer = t.Rows.Count -1 To 0 Step -1 t.rows(i).Checked = not t.rows(i).Checked Next t.Current.Checked = not t.Current.Checked \'因为发现反选时,焦点所在行不能反选,就加了这句 2022版已经没这个问题了,但不想升级,用不惯代码编辑器; 动态添加一个复选框的做法我会,但在实现勾选后自动计算勾选记录的金额合计值会很慢, 因为datacolchanged事件里写了计算勾选记录合计金额的代码,全选或反选后,会反复触发这个事件,很慢。 想问问,有没有其他代码可以完整的实现复选框的全选、反选功能? |
-- 作者:rogen -- 发布时间:2023/5/30 15:11:00 -- 我要复选框的原因是想实现勾选部分记录后能做批量操作(审核、删除等) 因为系统自带的底部合计栏只能显示所有可见记录的合计值, 因此想知道勾选记录的合计值的话只能自己写代码, 我动态添加了一个“选”的布尔值的列,在datacolchanged事件写代码: Dim tol As Double = 0
这段代码,若是一行行的勾选,问题不大,但若用一楼的全选、反选,则会反复触发这个事件,就很慢。 这段代码能优化不,比如不让反复计算,等所有行都全选/反选结束后再计算合计值。
|
-- 作者:chen37280600 -- 发布时间:2023/5/30 15:21:00 -- 我之前有解决方法,可以参考下 \'需求:点击按钮,可以反选所有的行 \'思路: \'1用ForEach遍历行去改Check状态,有bug,要使用这种切换Postion的方法改Check状态 \'2但是切换Position,会触发CurrentChanged事件,造成性能影响,所以用SystemReady中止事件执行 Dim t As Table = Tables("MHUserInfo") \'根据情况改成你的表名 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 \'启动表绘制 |
-- 作者:qqzwc -- 发布时间:2023/5/30 15:31:00 -- 试着抛开自带的复选框,直接对DataTable进行操作呢,效率会高一点吧 在表里面设计一列(也可以动态添加一个临时列),这一列就是逻辑型的,在DataTable里面直接计算。 至于全选代码导致反复触发,全选代码前面加个SystemReady=False后面加个SystemReady=True
|
-- 作者:chen37280600 -- 发布时间:2023/5/30 17:32:00 -- 加临时列就太麻烦了,在原来基础里选完更简单 |
-- 作者:rogen -- 发布时间:2023/5/30 18:28:00 -- Position + SystemReady=False 好用, 谢谢楼上2位。 |