以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于统计图  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=124919)

--  作者:susu312
--  发布时间:2018/9/16 12:43:00
--  关于统计图

老师,我遇到一个问题:

  


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

 

 

 

 

 

 

1、如果是超级管理的话,这个图是全辖的图,

 

绥德是榆林下属单位,希望,把榆林的人数+它所有的下属单位的人数的和作为一根柱子

 

2、效果就是

 

 

西安- 榆林-汉中----

 

榆林的人数=它的人数+它下属单位人数

汉中的人数=它的人数+Ta下属单位人数

 

。。。。。

 

\'\'图表1
\'生成各单位人数临时表
Dim b As New GroupTableBuilder("人数统计表1",DataTables("person"))
Dim t As DataTable
b.Groups.AddDef("organName","单位")
b.Totals.AddDef("organName",AggregateEnum.Count,"人数")
\'b1.FromServer = True
t=b.Build() \'生成统计表

 

\'\'增加标记列 这个是为了X轴单位按照顺序排列,发现,名称是顺序排列了,数字确对不上
t.DataCols.Add("标记", Gettype(String)) \'\'增加标记列
For Each r As DataRow In t.DataRows  \'\'对于表中的每一行
        r("单位")=r("单位").Replace(" ","")
        Dim dr2  As  DataRow
        dr2 =  DataTables("organList").Find("[organName] = \'" & r("单位") & "\'" ) \'否则在单位表查找同名的单位行,将找到的行赋值给变量dr
        If dr2 IsNot Nothing Then  \'如果找到了同名的单位行,也就是dr不是Nothing
              r("标记")= dr2("fuZhu")
        End If
Next
Tables("人数统计表1").Sort="标记"
\'
\'\'生成统计图
Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Chart= e.Form.Controls("Chart1") \' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形)
Chart.SeriesList.Clear() \'清除图表原来的图系
Series = Chart.SeriesList.Add() \'增加一个图系
Series.Length = Tables("人数统计表1").Rows.Count \'设置图系的长度
For i As Integer = 0 To Tables("人数统计表1").Rows.Count- 1 \'指定每个数据点的位置
    Series.X(i) = i \'指定水平坐标
    Series.Y(i) = t.DataRows(i)("人数") \'指定垂直坐标
    Chart.AxisX.SetValueLabel(i, Tables("人数统计表1").Rows(i)("单位")) \'指定字符表示
Next
Chart.AxisX.AnnoWithLabels = True \'启用字符标示

\'\'图表效果设置
Series.DataLabelText = "{#YVAL}"
Chart.BarClusterWidth = 20
Chart.AxisX.AnnoRotation = - 20 \'X轴标示逆时针旋转45度
Chart.VisualEffect = True \'加上这一行,让你的图表更漂亮
Chart.HeaderFont=fnt
If _UserRole = "超级管理员"  Then
    Chart.HeaderText=_UserOrgan & "全辖离退休干部人数统计图"
Else
    Chart.HeaderText=_UserOrgan & "辖区各单位离退休干部人数统计图"
End If


 


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

 

老师,我如何处理上面的表,让绥德县的人数累计到榆林,然后把绥德删除了?

[此贴子已经被作者于2018/9/16 13:11:07编辑过]

--  作者:有点甜
--  发布时间:2018/9/16 13:40:00
--  

\'\'图表1
\'生成各单位人数临时表
Dim b As New GroupTableBuilder("人数统计表1",DataTables("person"))
Dim t As DataTable
b.Groups.AddDef("organName","单位")
b.Totals.AddDef("organName",AggregateEnum.Count,"人数")
\'b1.FromServer = True
t=b.Build() \'生成统计表

 

\'\'增加标记列 这个是为了X轴单位按照顺序排列,发现,名称是顺序排列了,数字确对不上
t.DataCols.Add("标记", Gettype(String)) \'\'增加标记列
For i As Integer = t.DataRows.count-1 To 0 Step -1
    r("单位")=r("单位").Replace(" ","")
    Dim dr2  As  DataRow
    dr2 =  DataTables("organList").Find("[organName] = \'" & r("单位") & "\'" ) \'否则在单位表查找同名的单位行,将找到的行赋值给变量dr
    If dr2 IsNot Nothing Then  \'如果找到了同名的单位行,也就是dr不是Nothing
        If dr2("fuZhu").length < 6 Then
            r("标记")= dr2("fuZhu")
        End If
        r("人数") = t.Compute("sum(人数)", "标记 like \'" & dr2("fuZhu") & "%\'")

    End If
Next
Tables("人数统计表1").Sort="标记"
t.DeleteFor("标记 is null")


--  作者:susu312
--  发布时间:2018/9/16 14:16:00
--  
以下是引用有点甜在2018/9/16 13:40:00的发言:

\'\'图表1
\'生成各单位人数临时表
Dim b As New GroupTableBuilder("人数统计表1",DataTables("person"))
Dim t As DataTable
b.Groups.AddDef("organName","单位")
b.Totals.AddDef("organName",AggregateEnum.Count,"人数")
\'b1.FromServer = True
t=b.Build() \'生成统计表

 

\'\'增加标记列 这个是为了X轴单位按照顺序排列,发现,名称是顺序排列了,数字确对不上
t.DataCols.Add("标记", Gettype(String)) \'\'增加标记列
For i As Integer = t.DataRows.count-1 To 0 Step -1
    r("单位")=r("单位").Replace(" ","")
    Dim dr2  As  DataRow
    dr2 =  DataTables("organList").Find("[organName] = \'" & r("单位") & "\'" ) \'否则在单位表查找同名的单位行,将找到的行赋值给变量dr
    If dr2 IsNot Nothing Then  \'如果找到了同名的单位行,也就是dr不是Nothing
        If dr2("fuZhu").length < 6 Then
            r("标记")= dr2("fuZhu")
        End If
        r("人数") = t.Compute("sum(人数)", "标记 like \'" & dr2("fuZhu") & "%\'")

    End If
Next
Tables("人数统计表1").Sort="标记"
t.DeleteFor("标记 is null")

 

老师 ,目前只有一个问题: 统计表和统计图对不上,统计图 的X轴的名称和它的数据不一致,请您指导一下

 

 

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

2、


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

 

标记列代码:

\'\'增加标记列
t.DataCols.Add("标记", Gettype(String)) \'\'增加标记列
For Each r As DataRow In t.DataRows  \'\'对于表中的每一行
    r("单位")=r("单位").Replace(" ","")
    Dim dr2  As  DataRow
    dr2 =  DataTables("organList").Find("[organName] = \'" & r("单位") & "\'" ) \'否则在单位表查找同名的单位行,将找到的行赋值给变量dr
    If dr2 IsNot Nothing Then  \'如果找到了同名的单位行,也就是dr不是Nothing
        r("标记")= dr2("fuZhu")
    End If
Next
For Each r As DataRow In t.DataRows  \'\'对于表中的每一行
    If r("标记").length = 6 Then
          r("人数") = t.Compute("sum(人数)", "标记 like \'" & r("标记") & "%\'")
    End If
Next
Tables("人数统计表1").Sort="标记"
t.DeleteFor("len(标记) = 9 ")

 

图表代码:

\'\'生成统计图
Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Chart= e.Form.Controls("Chart1") \' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Bar \'图表类型改为Bar(条形)
Chart.SeriesList.Clear() \'清除图表原来的图系
Series = Chart.SeriesList.Add() \'增加一个图系
Series.Length = Tables("人数统计表1").Rows.Count \'设置图系的长度
For i As Integer = 0 To Tables("人数统计表1").Rows.Count- 1 \'指定每个数据点的位置
    Series.X(i) = i \'指定水平坐标
    Series.Y(i) = t.DataRows(i)("人数") \'指定垂直坐标
    Chart.AxisX.SetValueLabel(i, Tables("人数统计表1").Rows(i)("单位")) \'指定字符表示
Next
Chart.AxisX.AnnoWithLabels = True \'启用字符标示

 

 

已解决
 

[此贴子已经被作者于2018/9/16 14:45:20编辑过]