2013-11-21 2 views
1

Я пытаюсь развернуть некоторые диаграммы в своем веб-приложении, но у меня возникают проблемы с диаграммой 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 

Если кто-нибудь может помочь, я был бы признателен!

ответ

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 Studio.