Foxtable(狐表)用户栏目专家坐堂 → 垂直表转为水平表错误


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

主题:垂直表转为水平表错误

帅哥哟,离线,有人找我吗?
透明人生
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:223 积分:1732 威望:0 精华:0 注册:2019/10/19 23:00:00
  发帖心情 Post By:2020/3/2 11:36:00 [只看该作者]

这个是目录树的代码,用系统的筛选树和自定义目录树的结果是一样。
Dim nms As String() = {"单元","学科","年级","学校","班级"} '指定生成目录树的各列 
Dim qts As String() = {"'","'","'","'","'"}  '指定将各列的值括起来的符号,这里都是字符型,所以都是单引号 
Dim trv As WinForm.TreeView = e.Sender 
Dim flt As String 
Dim nd As WinForm.TreeNode 
For Each nd In e.node.allNodes '清除子节点的选中标记 
    nd.Checked = False 
Next 
nd = e.Node.ParentNode 
Do While nd IsNot Nothing '清除父节点的选中标记 
    nd.Checked = False 
    nd = nd.ParentNode 
Loop 
For Each nd In trv.AllNodes 
    If nd.Checked  Then 
        Dim rts() As String = nd.FullPath.Split("\") 
        Dim val As String = ""
        For i As Integer = 0 To rts.length - 1
            If val > "" Then
                val = val & " And "
            End If
            val = val & nms(i) & " = " & qts(i) & rts(i) & qts(i)
        Next
        If flt > "" Then
            flt = flt & " Or (" & val & ")"
        Else
            flt = val
        End If
    End If
Next
Tables("中心小学自测成绩表").Filter  = flt


图片点击可在新窗口打开查看此主题相关图片如下:筛选时的原数据表.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:生成后的统计表.png
图片点击可在新窗口打开查看





 回到顶部
帅哥,在线噢!
有点蓝
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106195 积分:540098 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/2 11:51:00 [只看该作者]

出错时显示一下最终的条件看看

msgbox(flt)

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


加好友 发短信
等级:童狐 帖子:223 积分:1732 威望:0 精华:0 注册:2019/10/19 23:00:00
  发帖心情 Post By:2020/3/2 12:18:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:错误提示.png
图片点击可在新窗口打开查看

 回到顶部
帅哥,在线噢!
有点蓝
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106195 积分:540098 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/2 13:30:00 [只看该作者]

For Each nd In trv.AllNodes 
    If nd.Checked  Then 
        Dim rts() As String = nd.FullPath.Split("\") 
        Dim val As String = ""
        For i As Integer = 0 To rts.length - 1
            If val > "" Then
                val = val & " And "
            End If
            val = val & nms(i) & " = " & qts(i) & rts(i) & qts(i)
        Next
        If flt > "" Then
            flt = flt & " Or (" & val & ")"
        Else
            flt = val
        End If
    End If
Next
msgbox(flt) ‘显示一下最终的条件看看’


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


加好友 发短信
等级:童狐 帖子:223 积分:1732 威望:0 精华:0 注册:2019/10/19 23:00:00
  发帖心情 Post By:2020/3/2 14:46:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:提示.png
图片点击可在新窗口打开查看

 回到顶部
帅哥,在线噢!
有点蓝
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106195 积分:540098 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/2 15:00:00 [只看该作者]

21楼的代码

Tables("中心小学自测成绩表").Filter  = flt

改为

msgbox(flt) ‘显示一下最终的条件看看’

测试

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


加好友 发短信
等级:童狐 帖子:223 积分:1732 威望:0 精华:0 注册:2019/10/19 23:00:00
  发帖心情 Post By:2020/3/2 15:27:00 [只看该作者]

我直接改代码。选定数学显示:单元='期中' And 学科 = ’数学‘
放在窗口命令中运行:

图片点击可在新窗口打开查看此主题相关图片如下:提示.png
图片点击可在新窗口打开查看



 回到顶部
帅哥,在线噢!
有点蓝
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106195 积分:540098 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/2 15:52:00 [只看该作者]

唉,先学会如何测试吧。在原窗口里测试!命令窗口里没有控件,肯定不能直接测试的

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


加好友 发短信
等级:童狐 帖子:223 积分:1732 威望:0 精华:0 注册:2019/10/19 23:00:00
  发帖心情 Post By:2020/3/2 16:25:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:单选时提示.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:全选时提示.png
图片点击可在新窗口打开查看

用下面的代码能正常统计,但有1个小问题:
如果没选定英语,生成水平表的列中会少了一个“英语”列,提示,无法设置总分表达式,少了一个【分数_3】,但可以生成水平表。
看看能不能,不管选定是一科或两科,都让它生成三科的列,没选定的学科的分数为空,总分自动计算有生成的学科。
Dim g As New CrossTableBuilder("自测水平表", DataTables("中心小学自测成绩表"))
g.FIlter = Tables("中心小学自测成绩表").FIlter
g.HGroups.AddDef("学校")
g.HGroups.AddDef("年级")
g.HGroups.AddDef("班级")
g.HGroups.AddDef("姓名")
g.VGroups.AddDef("学科")
g.Totals.AddDef("分数")
g.Build()
DataTables("自测水平表").DataCols.Add("总分", Gettype(Double),"IsNull([分数_1],0) + IsNull([分数_2],0) + IsNull([分数_3],0)")
MainTable = Tables("自测水平表")
解决这个问题会不会更容易?是不是原来生成水平表的代码有问题?
[此贴子已经被作者于2020/3/2 16:54:37编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  30楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106195 积分:540098 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/2 16:58:00 [只看该作者]

……
g.Build()
dim s as string = ""
for each dc as datacol in DataTables("自测水平表").datacols
if dc.name.startswith("分数_")
    s = s & "+ IsNull([" & dc.name & "],0) "
end if
next
s = s.trim("+")
msgbox(s)
DataTables("自测水平表").DataCols.Add("总分", Gettype(Double),s)
MainTable = Tables("自测水平表")

 回到顶部
总数 32 上一页 1 2 3 4 下一页