Foxtable(狐表)用户栏目专家坐堂 → 做图表,当有要统计的数据不存在时会报错


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

主题:做图表,当有要统计的数据不存在时会报错

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


加好友 发短信
等级:童狐 帖子:299 积分:2563 威望:0 精华:0 注册:2018/2/3 10:48:00
做图表,当有要统计的数据不存在时会报错  发帖心情 Post By:2020/10/7 2:23:00 [只看该作者]

请教:
1)以下代码,当合同台账表中某个要统计的人要统计的数据为零时,会报错:未将对象引用设置到对象的实例。如何处理?
2)在从员工档案中GetValues时,本意是想列出[员工编号]前三位是"TG2"且[岗位状态]为“在岗”或“试用期”的人,加上 [员工编号] = 'TG1001' 或 'TG1002'的人,这个条件如何设置?


Dim Chart As WinForm.Chart '定义一个图表变量
Dim Series As WinForm.ChartSeries '定义一个图系变量
Dim lst As List(Of String) = DataTables("员工档案").GetValues("姓名"," [员工编号] = 'TG2003' Or [员工编号] = 'TG2005'  Or [员工编号] = 'TG1001' or [员工编号] = 'TG1002' ","员工编号")
Dim tbl2 As DataTable = DataTables("合同台账") '定义一个变量tbl引用数据表
Chart = e.Form.Controls("Chart2") ' 引用窗口中的图表
Chart.VisualEffect = True '加上这一行,让你的图表更漂亮
Chart.ChartType = ChartTypeEnum.Bar '设置图表类型为Bar(条形)
Chart.SeriesList.Clear() '清除图表原来的图系
Series = Chart.SeriesList.Add() '增加一个图系
Series.Text = "合同金额"
Series.Length = lst.Count '设置图系的长度
For i As Integer = 0 To lst.Count - 1 '指定每个数据点的位置
    Series.X(i) = i '指定水平坐标
    Series.Y(i) = tbl2.Compute("Sum(名义结算金额)","[销售负责人] = '" & lst(i) & "' And [合同年度] = 2020") '指定垂直坐标
    Chart.AxisX.SetValueLabel(i, lst(i)) '指定字符表示
    Series.DataLabelText = "{#YVAL}"
Next
Chart.AxisX.AnnoWithLabels = True '启用字符标示
Chart.LegendVisible = True '显示图列
Chart.LegendCompass= CompassEnum.South '图列显示在南方(底端)

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


加好友 发短信
等级:超级版主 帖子:106107 积分:539646 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/7 8:46:00 [只看该作者]

1、
……
Chart.ChartType = ChartTypeEnum.Bar '设置图表类型为Bar(条形)
Chart.SeriesList.Clear() '清除图表原来的图系
if lst.Count = 0 then return

2、
Dim lst As List(Of String) = DataTables("员工档案").GetValues("姓名"," ([员工编号] like 'TG2%' Or [员工编号] = 'TG1001' or [员工编号] = 'TG1002') and ([岗位状态]='在岗'or [岗位状态]='试用期') ","员工编号")

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


加好友 发短信
等级:童狐 帖子:299 积分:2563 威望:0 精华:0 注册:2018/2/3 10:48:00
  发帖心情 Post By:2020/10/7 10:37:00 [只看该作者]

谢谢蓝老师。我试一下。我的目的应当达到了,但就编码来说第2条应当与我想的有点区别,我原想的是 [员工编号] = 'TG1001' or [员工编号] = 'TG1002'无论[岗位状态]是什么,都要加进来。

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


加好友 发短信
等级:童狐 帖子:299 积分:2563 威望:0 精华:0 注册:2018/2/3 10:48:00
  发帖心情 Post By:2020/10/7 10:55:00 [只看该作者]

Dim lst As List(Of String) = DataTables("员工档案").GetValues("姓名"," ([员工编号] like 'TG2%' ) and ([员工状态]='在职'or [员工状态]='试用期') Or [员工编号] = 'TG1001' or [员工编号] = 'TG1002'","员工编号 DESC")


[员工编号 DESC] 才是TG1001、TG1002、TG2001的顺序?

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


加好友 发短信
等级:童狐 帖子:299 积分:2563 威望:0 精华:0 注册:2018/2/3 10:48:00
  发帖心情 Post By:2020/10/7 11:00:00 [只看该作者]

蓝老师,第一个问题我可能表述有问题,不是说 lst.Count = 0的情况,是说其中一个的一个人,在统计数据如名义结算金额时,如果没有这个人名下的数据时会报借。

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


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

[员工编号 DESC] 肯定是TG2001、TG1002、TG1001

For i As Integer = 0 To lst.Count - 1 '指定每个数据点的位置
    Series.X(i) = i '指定水平坐标
dim cnt as double = tbl2.Compute("Sum(名义结算金额)","[销售负责人] = '" & lst(i) & "' And [合同年度] = 2020") '指定垂直坐标
    Series.Y(i) = cnt 
    Chart.AxisX.SetValueLabel(i, lst(i)) '指定字符表示
    Series.DataLabelText = "{#YVAL}"
Next

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


加好友 发短信
等级:童狐 帖子:299 积分:2563 威望:0 精华:0 注册:2018/2/3 10:48:00
  发帖心情 Post By:2020/10/7 11:22:00 [只看该作者]

谢谢蓝老师,问题都解决。
第二个是我测试的时间输出顺序搞反了,反着输出的。

第一个问题也解决了。

 回到顶部