我正在尝试在我的网络应用程序上部署一些图表,但是我遇到了StackedColumn图表的问题;该系列要么彼此重叠,要么相互分开,结果是整体总数被误传。以下是显示每个问题的两个示例:
http://sdrv.ms/17nzZ2k - 系列之间的差距
http://sdrv.ms/1fg6LqW - 重叠系列
这是我生成图表的代码:
Private Sub chartMonMStack_DataBinding(sender As Object, e As System.EventArgs) Handles chartMonMStack.DataBinding
Dim chart As Chart = chartMonMStack
Dim cArea As String = "area"
chart.ChartAreas(cArea).Position.Width = 85
chart.ChartAreas(cArea).Position.Height = 100
chart.ChartAreas(cArea).AxisX.MajorGrid.LineColor = Drawing.ColorTranslator.FromHtml("#999999")
chart.ChartAreas(cArea).AxisY.MajorGrid.LineColor = Drawing.ColorTranslator.FromHtml("#999999")
chart.ChartAreas(cArea).AxisX.Title = "年"
chart.ChartAreas(cArea).AxisY.Title = "NTD"
chart.ChartAreas(cArea).AxisY.LabelStyle.Format = "#,##0"
Dim conStr As String = ConfigurationManager.ConnectionStrings("GenshenPOS").ConnectionString
Dim conn As New SqlConnection(conStr)
conn.Open()
Dim sql As String = "SELECT [y], [Store], SUM([amount]) AS [NTD] FROM vwMonthly " & _
"WHERE [m] = '" & dropMonth.SelectedValue & "月' GROUP BY [y], [Store] ORDER BY [y], [Store]"
Dim sqlPoints As New SqlCommand(sql, conn)
Dim reader As SqlDataReader = sqlPoints.ExecuteReader()
While reader.Read()
If chart.Series.IndexOf(reader.Item("Store")) = -1 Then
chart.Series.Add(reader.Item("Store"))
chart.Legends.Add(reader.Item("Store"))
chart.Series(reader.Item("Store")).ChartType = SeriesChartType.StackedColumn
chart.Series(reader.Item("Store")).ChartArea = cArea
chart.Series(reader.Item("Store")).IsValueShownAsLabel = True
chart.Series(reader.Item("Store")).LabelFormat = "#,##0"
chart.Series(reader.Item("Store")).LabelForeColor = Drawing.Color.White
End If
chart.Series(reader.Item("Store")).Points.AddXY(reader.Item("y"), reader.Item("NTD"))
End While
conn.Close()
End Sub
我已经读过,如果系列有空白数据点,可能会因为缺少数据而出现间隙,但是在受影响的列上,没有丢失的数据点。另外我不认为这可以解释为什么在其他情况下,条形重叠并且没有正确地将它们自己定位在图表上。不过我尝试添加以下内容但无济于事。
For Each s As Series In chart.Series
chart.DataManipulator.InsertEmptyPoints(1, IntervalType.Number, s)
Next
如果有人可以提供帮助,我会很感激!
答案 0 :(得分:0)
似乎InsertEmptyPoints
是解决问题的正确方法,但如果有人对此问题没有像我一样做任何事情,那么在方法中使用其他参数可以解决您的问题,因为它我做了。
For Each s As Series In chart.Series
chart.DataManipulator.InsertEmptyPoints(1, IntervalType.Number, 0, IntervalType.Number, MinXAxis, MaxXAxis, s)
Next
我在方法的偏移部分使用了0值(因为我不需要偏移),而是专注于第5(fromXValue
)和第6(toXValue
)个参数来指定沿着我的轴的值范围。变量MinXAxis和MaxXAxis被动态分配我需要的值。
这解决了我的系列的间隙和重叠。
有关InsertEmptyPoints
的更多信息,请参阅msdn,但请注意,它目前未提及fromXValue
和toXValue
参数,我在Visual中发现了这些参数工作室。