以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]请教关于判断选定多个复选框的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100961) |
||||
-- 作者:ltty5200 -- 发布时间:2017/5/22 15:16:00 -- [求助]请教关于判断选定多个复选框的问题 我的表有第一列,第二列....第八列,合计列共9列。当选定复选框1的时候,显示第一列、第二列;选定复选框2的时候,显示第三列、第四列;选定复选框3的时候,显示第五列、第六列,选定复选框4的时候,显示第七列、第八列。 Dim t As Table = CurrentTable For Each c As Col In t.Cols c.visible = False Next If forms("指定显示列").Controls("CheckBox1").checked=True Then t.Cols("第一列").visible = True t.Cols("第二列").visible = True End If If forms("指定显示列").Controls("CheckBox2").checked=True Then t.Cols("第三列").visible = True t.Cols("第四列").visible = True End If If forms("指定显示列").Controls("CheckBox3").checked=True Then t.Cols("第五列").visible = True t.Cols("第六列").visible = True End If If forms("指定显示列").Controls("CheckBox4").checked=True Then t.Cols("第七列").visible = True t.Cols("第八列").visible = True End If 通过这样的代码就达到了要求。但是我想实现一个功能,选中的复选框数量超过1个的时候,显示合计列,请问如果编写代码实现?
|
||||
-- 作者:有点色 -- 发布时间:2017/5/22 15:20:00 -- Dim t As Table = CurrentTable For Each c As Col In t.Cols c.visible = False Next Dim i As Integer = 0 If forms("指定显示列").Controls("CheckBox1").checked=True Then t.Cols("第一列").visible = True t.Cols("第二列").visible = True i += 1 End If If forms("指定显示列").Controls("CheckBox2").checked=True Then t.Cols("第三列").visible = True t.Cols("第四列").visible = True i += 1 End If If forms("指定显示列").Controls("CheckBox3").checked=True Then t.Cols("第五列").visible = True t.Cols("第六列").visible = True i += 1 End If If forms("指定显示列").Controls("CheckBox4").checked=True Then t.Cols("第七列").visible = True t.Cols("第八列").visible = True i += 1 End If If i > 1 Then t.Cols("合计").visible = True End If |
||||
-- 作者:ltty5200 -- 发布时间:2017/5/22 15:57:00 -- 回复:(有点色)Dim t As Table = CurrentTableFor E... 谢谢老师。还是老师厉害啊,我们经验太欠缺了。 |
||||
-- 作者:ltty5200 -- 发布时间:2017/5/23 17:43:00 -- 回复:(有点色)请教设置合计列内容自动更新 老师,我用如下代码来求合计列的值(统计显示列的求和) Select Case e.DataCol.Name Case "第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列" Dim cls() As String = {"第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列"} Dim t As Table = Tables(e.DataTable.Name) Dim sum As Integer = 0 For Each c As String In cls If t.Cols(c).Visible Then sum += e.DataRow(c) End If
Next e.DataRow("合计") = sum End Select 可是每次在设置显示列窗口中设置了要显示的列后,合计列的内容不会根据显示的列自动更新。我想实现合计列根据显示的列自动更新数据。求老师指导如何写代码。
|
||||
-- 作者:有点色 -- 发布时间:2017/5/23 18:04:00 -- Dim t As Table = CurrentTable For Each c As Col In t.Cols c.visible = False Next Dim i As Integer = 0 If forms("指定显示列").Controls("CheckBox1").checked=True Then t.Cols("第一列").visible = True t.Cols("第二列").visible = True i=i+1 End If If forms("指定显示列").Controls("CheckBox2").checked=True Then t.Cols("第三列").visible = True t.Cols("第四列").visible = True i=i+1 End If If forms("指定显示列").Controls("CheckBox3").checked=True Then t.Cols("第五列").visible = True t.Cols("第六列").visible = True i=i+1 End If If forms("指定显示列").Controls("CheckBox4").checked=True Then t.Cols("第七列").visible = True t.Cols("第八列").visible = True i =i + 1 End If If i > 1 Then DataTables("表a").datacols("第一列").RaiseDataColChanged t.Cols("合计").visible = True End If |
||||
-- 作者:ltty5200 -- 发布时间:2017/5/23 20:12:00 -- 回复:(有点色)Dim t As Table = CurrentTableFor E... 谢谢老师,完美解决了问题。我开始也想到用重置列的方法,可是我想到的是需要重置第一列到第八列,八个列重置效率很低下。可是现在我有点不明白了,为什么只重置第一列而不用重置其他列都可以?难道任意重置一列和重置所有列效果一样?请老师解答下,谢谢。 |
||||
-- 作者:有点蓝 -- 发布时间:2017/5/23 20:53:00 -- Case "第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列" case里的列,重置任何一列都可以
|
||||
-- 作者:ltty5200 -- 发布时间:2017/5/24 11:23:00 -- 回复:(有点色)请求除重置列外的其他方法 老师,重置列确实能解决合计列数据更新的问题,但是在我自己的实际项目中,使用重置列会卡顿3分钟左右。我的合计列不止一个,这样就会很卡顿。 所以我想请老师帮忙找个除开重置列外的方法。目前我的思路是修改合计列的公式,原公式是这样的:
Select Case e.DataCol.Name
Case "第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列"
Dim cls() As String = {"第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列"}
Dim t As Table = Tables(e.DataTable.Name)
Dim sum As Integer = 0 For Each c As String In cls
If t.Cols(c).Visible Then sum += e.DataRow(c)
End If
Next
e.DataRow("合计") = sum End Select 但是这个代码只能用于DataColChanged事件中。我想把它来运用在判断显示列窗口中,也就是判断显示列后,再求合计列的值。但是这个代码里面的参数都是DataColChanged的E参数。请老师帮忙改成通用型,使它在判断显示列的窗口的button按钮的click事件中也能使用。谢谢! |
||||
-- 作者:有点色 -- 发布时间:2017/5/24 12:25:00 -- systemready = False For Each dr As DataRow In DataTables("表B").DataRows Dim cls() As String = {"第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列"} Dim sum As Integer = 0 For Each c As String In cls sum += dr(c) Next dr("合计") = sum Next systemready = True |
||||
-- 作者:ltty5200 -- 发布时间:2017/5/24 14:19:00 -- 谢谢老师,完美解决问题 |