以文本方式查看主题

-  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个的时候,显示合计列,请问如果编写代码实现?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:按需要显示指定列.zip


--  作者:有点色
--  发布时间: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
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:按需要显示指定列1.zip

        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
--  
谢谢老师,完美解决问题