以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 关于图表  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=45319)

--  作者:kunny
--  发布时间:2014/1/22 8:47:00
--  [求助] 关于图表
使用双图表时,图表需要变换不同的数据展现,由于X轴的标签是用Chart.AxisX.SetValueLabel写入的。每次赋值前无论怎样Clear,都是在前面的文字上继续覆盖写,造成字迹模糊(见附件样图),哪位知道如何每个循环进入后完全清除以前的图表内容。
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20140122083703.jpg
图片点击可在新窗口打开查看

主要的代码是:
            Dim sps As List(of String) = DataTables("chart_values").GetValues("ScorePart","[bankCode] = \'" & MainCode & "\' And [ScorePart] Is Not NULL")
            Dim fs As String =  "[BankCode] = \'" & MainCode & "\' And [Year] = \'" & crtYear & "\' And [Quarter] = \'" & crtQuarter & "\' And [RoleCode] = \'" & crtRole & "\'"
            For Each sp As String In sps  \'A/B表
                Dim Chart As WinForm.Chart 
                Dim Series As WinForm.ChartSeries 
                Chart = e.Form.Controls("Chart" & sp) 
                \'Chart.VisualEffect = True
                Chart.ChartType = ChartTypeEnum.Bar
                Chart.ChartType2 = ChartTypeEnum.XYPlot
                Chart.SeriesList.Clear() 
                Chart.SeriesList2.Clear()
                Dim drl As List(of DataRow)
                drl = DataTables("chart_values").Select(fs & " And [ScorePart] = \'" & sp & "\'","LossRate DESC")
                If drl.Count > 0 Then
                    Series = Chart.SeriesList.Add() 
                    Series.Length = drl.Count
                    For i As Integer = 0 To Series.Length - 1
                        Series.X(i) = i
                        Series.Y(i) = Math.Round(drl(i)("LossRate") * 100,2)
                    Next
                    Series.DataLabelText = "{#YVAL}" & "%"
                    Series.Text = "分项失分率"
                    Chart.LegendCompass= CompassEnum.North
                    Chart.AxisX.AnnoRotation = - 30
                    Chart.AxisX.AnnoWithLabels = True
                    
                    Series = Chart.SeriesList2.Add() 
                    Series.Length = drl.Count
                    For i As Integer = 0 To Series.Length - 1
                        Series.X(i) = i
                        Series.Y(i) = Math.Round(drl(i)("Perception") * 100,2)
                        \'Chart.AxisX.SetValueLabel(i,drl(i)("Name"))
                    Next
                    Chart.LegendVisible = True \'显示图列
                    Series.DataLabelText = "{#YVAL}" & "%"
                    Series.Text = "累积百分比"
                    For i As Integer = 0 To Series.Length - 1
                        Chart.AxisX.SetValueLabel(i,drl(i)("Name"))
                    Next
                End If
            Next


--  作者:Bin
--  发布时间:2014/1/22 8:49:00
--  
做个例子发上来看看.
--  作者:kunny
--  发布时间:2014/1/22 8:57:00
--  
另外:
 图表的纵向值Series.Y(i) = Math.Round(drl(i)("LossRate") * 100,2)现在是数值,想在乘以100后的数字后面加上一个“%”加不了( & “%”),如果和X轴一样使用Chart.AxisY.SetValueLabel(i,Math.Round(drl(i)("LossRate") * 100,2) & "%") 也显示不了,这是什么问题呢?

--  作者:Bin
--  发布时间:2014/1/22 9:09:00
--  
你现在不是显示百分比号了吗?  计算过程中当然不可以添加字符串.

具体请上例子.

--  作者:kunny
--  发布时间:2014/1/22 9:11:00
--  
是两边两个Y轴上的刻度显示数字加不上%,现在都是整数吗,例如:160 应为 160%
--  作者:Bin
--  发布时间:2014/1/22 9:13:00
--  
刻度只能用数值.
--  作者:kunny
--  发布时间:2014/1/22 9:14:00
--  
主要是下面标签(汉字)的重写,一步一步跟踪了图表形成过程,生成新图表时,是在上一次的图表上重写的,是不是那部分数据已经被丢弃了,就显示在那里,无法清除?
--  作者:kunny
--  发布时间:2014/1/22 9:15:00
--  
下面模糊的文字实际每次是写了一遍,但是上一次的图还是保留的,所以叠加模糊了。
--  作者:Bin
--  发布时间:2014/1/22 9:16:00
--  
请上例子.
--  作者:kunny
--  发布时间:2014/1/22 9:19:00
--  
版主没看明白我的例子吗? 简单点说:
1、Y轴上那些整数(20,40,。。。,160)如何加上百分号。
2、如何清除X轴上的上一次留下的文字(或是清空彻底清空上一次的图表信息)。