Foxtable(狐表)用户栏目专家坐堂 → 统计得出的表如何按照单位重新排序


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

主题:统计得出的表如何按照单位重新排序

美女呀,离线,留言给我吧!
susu312
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
统计得出的表如何按照单位重新排序  发帖心情 Post By:2018/10/19 15:16:00 [只看该作者]

 

统计得出的表如何按照单位重新排序


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

 

单位列的顺序不对,

[此贴子已经被作者于2018/10/19 15:17:59编辑过]

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


加好友 发短信
等级:超级版主 帖子:110592 积分:562856 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/10/19 15:25:00 [只看该作者]


 回到顶部
美女呀,离线,留言给我吧!
susu312
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/10/22 9:20:00 [只看该作者]

以下是引用有点蓝在2018/10/19 15:25:00的发言:
参考:http://www.foxtable.com/webhelp/scr/1432.htm


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

为啥合计在中间,不应该在最下面么


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/22 9:28:00 [只看该作者]

方法一:不要生成【合计】最后再用【合计模式】或者【汇总模式】显示合计即可。

 

方法二:把合计那一行,改成【 总合计】,再排序,即可。


 回到顶部
美女呀,离线,留言给我吧!
susu312
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/10/22 9:48:00 [只看该作者]

以下是引用有点甜在2018/10/22 9:28:00的发言:

方法一:不要生成【合计】最后再用【合计模式】或者【汇总模式】显示合计即可。

 

方法二:把合计那一行,改成【 总合计】,再排序,即可。

方法一不能同时实现水平汇总和垂直汇总?

方法二生成表后要遍历?


 回到顶部
美女呀,离线,留言给我吧!
susu312
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/10/22 9:49:00 [只看该作者]

以下是引用有点甜在2018/10/22 9:28:00的发言:

方法一:不要生成【合计】最后再用【合计模式】或者【汇总模式】显示合计即可。

 

方法二:把合计那一行,改成【 总合计】,再排序,即可。

''定义数据三个统计1\2\3的数据字典,便于引用显示值
Dim dmp1 = Tables("统计1").cols("分组列").DataMap
Dim dmp2 = Tables("统计2").cols("分组列").DataMap
Dim b1 As New SQLCrossTableBuilder("统计表1","person")
Dim b2 As New SQLCrossTableBuilder("统计表2","history")
''数据库指定
b1.C
b2.C
''设置合并
Dim dt1 As fxDataSource
Dim dt2 As fxDataSource
''定义一个数组,当实时库+历史库查询时,nms作为关联列
Dim Lst As New List(Of String)  ''定义集合
Dim nms As String()   ''指定连接列
''设置水平分组
Dim count1 As Integer = 0
For Each r As Row In Tables("统计1").Rows
   If r.IsNull("分组列")=False Then
        If r.IsNull("日期分组")=False Then
            b1.HGroups.AddDef(r("分组列"), DateGroupEnum.Year,  r("标题") )
            b2.HGroups.AddDef(r("分组列"), DateGroupEnum.Year,  r("标题") )
        Else
            b1.HGroups.AddDef(r("分组列"),r("标题") )'添加列用于水平分组
            b2.HGroups.AddDef(r("分组列"),r("标题") )
        End If
        Lst.Add( r("标题") )
   Else
       count1 = count1 +1
       Continue For
   End If
Next
''判断是否没有选择水平分组列
'If count1= 0 OrElse count1 = Tables("统计1").Rows.Count Then
     'MessageBox.Show("请选择水平分组列", "提示", MessageBoxButtons.ok, MessageBoxIcon.Information)
     'Return
'End If

''设置垂直分组 count判断的是为空的列
Dim count As Integer = 0
For Each r As Row In Tables("统计2").Rows
     If r.IsNull("分组列")=False Then
        count=count+1
     End If
Next

''判断是否没有选择垂直分组列
'If count = 0 OrElse count = Tables("统计2").Rows.Count Then
     'MessageBox.Show("请选择垂直分组列", "提示", MessageBoxButtons.ok, MessageBoxIcon.Information)
     'Return
'End If
''如果只有一组垂直分组列,就给加模式
If count=1 Then
   For Each r As Row In Tables("统计2").Rows
     If r.IsNull("分组列") =False  Then
        r("模式") =dmp2( r("分组列")) & "_{0}"
        b1.VGroups.AddDef(r("分组列"), r("模式"))
        b2.VGroups.AddDef(r("分组列"), r("模式"))
        Exit For
     End If
   Next

Else
   For Each r As Row In Tables("统计2").Rows
     If r.IsNull("分组列")=False Then
            If  r.IsNull("模式")=False  Then
                 b1.VGroups.AddDef( r("分组列"), r("模式"))
                 b2.VGroups.AddDef( r("分组列"), r("模式"))
            Else
                 b1.VGroups.AddDef(r("分组列"))   '添加列用于垂直分组
                 b2.VGroups.AddDef(r("分组列"))   '添加列用于垂直分组
            End If
     End If
   Next
End If
'

''设置统计
''避免用户跳过几行开始输入的问题
For Each r As Row In Tables("统计2").Rows
    If r.IsNull("分组列") =False Then
        b1.Totals.AddDef(r("分组列"), AggregateEnum.Count) '添加列用于统计
        b2.Totals.AddDef(r("分组列"), AggregateEnum.Count) '添加列用于统计
        Exit For
   End If
Next

 

''获取统计条件
'条件
'' 获取登录用户单位的辅助列名称,加载时以这个辅助列为条件
Dim organFuZhu As String=""
Dim dr2  As  DataRow
dr2 =  DataTables("organList").Find("[organName] = '" & _UserOrgan &  "'") '否则在单位表查找同名的单位行,将找到的行赋值给变量dr
If dr2 IsNot Nothing Then  '如果找到了同名的单位行,也就是dr不是Nothing
      organFuZhu = dr2("fuZhu")
Else
      Messagebox.show("登录用户的所属单位不存在!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
      Return
End  If

'''设定filter的全局条件是基于已经加载的表进行查询
Dim filter As String = ""
If _UserRole = "查询员" Then
    filter = ""
Else
    filter = "fuZhu Like '" & organFuZhu & "%'"
    filter= filter & "And "
    filter= filter & "len(fuZhu)<= " & organFuZhu.length+5
End If

If vars("filter") = "" Then
    b1.Filter=filter
    b2.Filter=filter
Else
    b1.Filter=vars("filter")
    b2.Filter=vars("filter")
End If


''统计
If  e.Form.Controls("RadioButton2").checked = True Then  ''如何实时库+历史库被选中
    ''设置合并
     dt1 = b1.BuildDataSource()
     dt2 = b2.BuildDataSource()
     nms = Lst.ToArray() '将集合转换为数组''将集合转换为数组
     For Each nm As String In lst
        Output.Show(nm)
     Next
     dt1.Combine(nms,dt2,nms) '将历史库统计数据和实时库统计数据组合到一起
     '''在另外一个窗口打开统计表
     forms("统计表").Open
     Dim t As Table = forms("统计表").controls("Table1").Table
     t.DataSource = dt1
     If e.Form.Controls("CheckBox1").Checked = True   OrElse  e.Form.Controls("CheckBox2").Checked = True  Then
          ''移动合计列
          For Each c As Col In t.Cols
                If c.Name ="合计" Then
                 c.Move(t.Cols.Count-1)
                End If
          Next
          ''设置表格居中
          For Each c As Col In t.Cols
                 c.TextAlign  = TextAlignEnum.Center
          Next
          ''设置合计列相加
          For Each r As Row In t.Rows
                r("合计") = r("合计1")+r("合计")
          Next
          ''删除多余的合计列
          t.Cols.Remove("合计1")
      End If
      t.Select(-1,-1)
Else
      '''在另外一个窗口打开统计表
     forms("统计表").Open
     Dim t As Table = forms("统计表").controls("Table1").Table
     t.DataSource = b1.BuildDataSource()
     For Each c As Col In t.Cols
         c.TextAlign  = TextAlignEnum.Center
     Next
     t.Select(-1,-1)
End If


'''设置统计选项
If e.Form.Controls("CheckBox1").Checked = True Then   '水平方向生成汇总
    b1.HorizontalTotal = True
    b2.HorizontalTotal = True
End If
If e.Form.Controls("CheckBox2").Checked = True Then   '垂直方向生成汇总
    b1.VerticalTotal = True
    b2.VerticalTotal = True
End If


e.Form.Close

 

 

我不知道咋改?


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/22 9:50:00 [只看该作者]

方法一:不要使用汇总,生成以后,再使用【合计模式】、【汇总模式】设置一次;

 

方法二:直接修改最后一行的【合计】,改成【总合计】即可啊。


 回到顶部
美女呀,离线,留言给我吧!
susu312
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/10/22 10:03:00 [只看该作者]

以下是引用有点甜在2018/10/22 9:50:00的发言:

方法一:不要使用汇总,生成以后,再使用【合计模式】、【汇总模式】设置一次;

 

方法二:直接修改最后一行的【合计】,改成【总合计】即可啊。

方法二,是在排序前,如何修改行名, 把合计改为总合计?


 回到顶部
美女呀,离线,留言给我吧!
susu312
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:997 积分:6752 威望:0 精华:0 注册:2018/6/8 16:17:00
  发帖心情 Post By:2018/10/22 10:24:00 [只看该作者]

以下是引用有点甜在2018/10/22 9:50:00的发言:

方法一:不要使用汇总,生成以后,再使用【合计模式】、【汇总模式】设置一次;

 

方法二:直接修改最后一行的【合计】,改成【总合计】即可啊。


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

 

老师,为啥生成统计表后,这个单位就正好相反的顺序排列了,我的原数据是按照单位排序的,


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/22 10:31:00 [只看该作者]

以下是引用susu312在2018/10/22 10:03:00的发言:

方法二,是在排序前,如何修改行名, 把合计改为总合计?

 

呃...排序之前,执行代码。

 

t.rows(t.rows.count-1)("单位") = "总合计"


 回到顶部
总数 15 1 2 下一页