1

Web アプリケーションにいくつかのチャートを展開しようとしていますが、StackedColumn チャートに問題があります。シリーズは互いに重複しているか、互いにギャップがあり、その結果、全体の合計が誤って伝えられています。それぞれの問題を示す 2 つの例を次に示します。

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 には、必要な値が動的に割り当てられます。

これにより、シリーズのギャップとオーバーラップの両方が解決されます。

詳細については、 msdnInsertEmptyPointsを参照してください。ただし、現在、およびパラメータについては言及されていないことに注意してください。Visual Studio 内からそれらについて知りました。fromXValuetoXValue

于 2013-11-21T07:38:34.467 に答える