以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]Histogram图表空值出错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=42886)

--  作者:worldespier
--  发布时间:2013/11/25 10:49:00
--  [求助]Histogram图表空值出错
我用代码生成图表时,当数据列中有空单元格时,就不会生成Histogram图表,请问这如何是好?没有相关的属性可以设置来避免这个问题吗?
--  作者:Bin
--  发布时间:2013/11/25 10:51:00
--  
不要使用绑定的方式,使用循环赋值的方式,这样就可以自由做判断了. 实在不会就上个例子吧.
--  作者:worldespier
--  发布时间:2013/11/25 18:22:00
--  实在不会,上传个例子,劳驾帮助解决一下
谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:关于histogram图表的问题.table


--  作者:有点甜
--  发布时间:2013/11/25 19:15:00
--  
 简单的做法,取巧一下

DataTables("表A").ReplaceFor("数据", 0, "数据 is null")
Dim Chart As WinForm.Chart \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Chart= Forms("图表").Controls("Chart1") \' 引用窗口中的图表
Chart.ChartType = ChartTypeEnum.Histogram \' 设置图表类型
Chart.DataSource = "表A" \'设置绑定表
Chart.SeriesList.Clear() \'清除图表原来的图系
Series = Chart.SeriesList.Add() \'增加一个图系
Series.Histogram.IntervalStart = 0 \'指定起始值
Series.Histogram.IntervalWidth = 10 \'指定分区宽度
Series.Histogram.IntervalNumber= 10 \'指定分区个数
Series.Y.DataField = "数据" \'Y轴绑定到数量列

--  作者:worldespier
--  发布时间:2013/11/26 13:28:00
--  问题
谢谢您的帮助。但是有个问题,空值和0是不同的概念,我不希望空值替换为0,也不希望0替换为空值,请问还有什么解决办法?
--  作者:狐狸爸爸
--  发布时间:2013/11/26 14:21:00
--  

那就不要绑定,自己编码,跳过空值的点,例如:

 

Dim Chart  As WinForm.Chart  \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Dim drs As List(of DataRow) = DataTables("统计表1").Select("数量  Is Not Null")
Chart= e.Form.Controls("Chart1") \' 引用窗口中的图表
Chart.SeriesList.Clear() \'清除图表原来的图系
Series = Chart.SeriesList.Add() \'增加一个图系
Series.Length = drs.Count \'设置图系的长度
For i As Integer =  0  To drs.Count -  1  \'指定每个数据点的位置
    Series.X(i) = i \'指定水平坐标
    Series.Y(i) = drs(i)("数量") \'指定垂直坐标
    Chart.AxisX.SetValueLabel(i, drs(i)("产品")) \'指定字符表示
Next
Chart.AxisX.AnnoWithLabels = True \'启用字符标示

 

要么用0替代空值,要么忽略空值,除此之外,没有两全的方法

 

 

[此贴子已经被作者于2013-11-26 14:22:15编辑过]

--  作者:有点甜
--  发布时间:2013/11/26 22:27:00
--  
 你试试这样是否满足。

Dim Chart  As WinForm.Chart  \'定义一个图表变量
Dim Series As WinForm.ChartSeries \'定义一个图系变量
Chart= e.Form.Controls("Chart1") \' 引用窗口中的图表
Chart.SeriesList.Clear() \'清除图表原来的图系
Chart.ChartType = ChartTypeEnum.Bar \' 设置图表类型
Series = Chart.SeriesList.Add() \'增加一个图系
Series.Length = 110 \'设置图系的长度
For i As Integer =  0  To 100 Step 10  \'指定每个数据点的位置
    Series.X(i) = i \'指定水平坐标
    Series.Y(i) = DataTables("表A").Compute("count(_identify)", "数据 >= " & i-10 & " And 数据 < " & i)
   Chart.AxisX.SetValueLabel(i, i) \'指定字符表示
Next
Chart.AxisX.AnnoWithLabels = True \'启用字符标示

--  作者:worldespier
--  发布时间:2013/11/28 14:04:00
--  谢谢

非常感谢您的帮助!我需要的图表类型是Histogram,显得麻烦一些。我用了另一种方法:建立一个临时表,将非空数据复制到临时表中,再生成图表。这样做只是延迟了零点几秒。但是在原来的基础上修改程序简单多了。

 

再次感谢你的帮助!