Foxtable(狐表)用户栏目专家坐堂 → [求助]请教关于判断选定多个复选框的问题


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

主题:[求助]请教关于判断选定多个复选框的问题

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


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
[求助]请教关于判断选定多个复选框的问题  发帖心情 Post By: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


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
回复:(有点色)Dim t As Table = CurrentTableFor E...  发帖心情 Post By:2017/5/22 15:57:00 [只看该作者]

谢谢老师。还是老师厉害啊,我们经验太欠缺了。

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


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
回复:(有点色)请教设置合计列内容自动更新  发帖心情 Post By: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
可是每次在设置显示列窗口中设置了要显示的列后,合计列的内容不会根据显示的列自动更新。我想实现合计列根据显示的列自动更新数据。求老师指导如何写代码。

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
回复:(有点色)Dim t As Table = CurrentTableFor E...  发帖心情 Post By:2017/5/23 20:12:00 [只看该作者]

谢谢老师,完美解决了问题。我开始也想到用重置列的方法,可是我想到的是需要重置第一列到第八列,八个列重置效率很低下。可是现在我有点不明白了,为什么只重置第一列而不用重置其他列都可以?难道任意重置一列和重置所有列效果一样?请老师解答下,谢谢。

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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/23 20:53:00 [只看该作者]

Case "第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列"

case里的列,重置任何一列都可以

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


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
回复:(有点色)请求除重置列外的其他方法  发帖心情 Post By: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事件中也能使用。谢谢!


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:146 积分:1151 威望:0 精华:0 注册:2017/2/10 15:09:00
  发帖心情 Post By:2017/5/24 14:19:00 [只看该作者]

谢谢老师,完美解决问题

 回到顶部