以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 做图表,当有要统计的数据不存在时会报错 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=157185) |
-- 作者:foxyuan -- 发布时间: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 \'图列显示在南方(底端)
|
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2020/10/7 10:37:00 -- 谢谢蓝老师。我试一下。我的目的应当达到了,但就编码来说第2条应当与我想的有点区别,我原想的是 [员工编号] = \'TG1001\' or [员工编号] = \'TG1002\'无论[岗位状态]是什么,都要加进来。 |
-- 作者:foxyuan -- 发布时间: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 -- 发布时间:2020/10/7 11:00:00 -- 蓝老师,第一个问题我可能表述有问题,不是说 lst.Count = 0的情况,是说其中一个的一个人,在统计数据如名义结算金额时,如果没有这个人名下的数据时会报借。 |
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2020/10/7 11:22:00 -- 谢谢蓝老师,问题都解决。 第二个是我测试的时间输出顺序搞反了,反着输出的。 第一个问题也解决了。
|