Я пытаюсь развернуть некоторые диаграммы в своем веб-приложении, но у меня возникают проблемы с диаграммой StackedColumn; серия либо перекрывается, либо разрывается друг от друга, в результате общая сумма искажается. Вот два примера, иллюстрирующие каждую проблему:ASP.net StackedColumn Chart Series - Overlapping & Gaps
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
Если кто-нибудь может помочь, я был бы признателен!