1

我正在尝试在我的 Web 应用程序上部署一些图表,但是 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

如果有人可以提供帮助,我将不胜感激!

4

1 回答 1

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的更多信息,但请注意,它目前没有提及fromXValueandtoXValue参数,我从 Visual Studio 中发现了它们。

于 2013-11-21T07:38:34.467 回答