ASP.NET MS图表控件:数据点插入错误。此数据系列只能设置2个Y值。参数名称:dataSource

时间:2018-02-28 11:52:05

标签: asp.net vb.net data-visualization microsoft-chart-controls

我在MS Chart控件上收到此错误:

  

数据点插入错误。此数据系列只能设置2个Y值。   参数名称:dataSource

它出现在我的代码中的chartPriceHistory_STATIC.DataBind()行。

我认为它与我添加点(AddXY)的方式有关,但无法弄清楚它是什么。

我尝试了这两个代码选项:

选项1 chartPriceHistory_STATIC.Series(seriesName).Points.AddXY(get3LetterMonth(CDate(row("createdate")).Month) + "-" + CDate(row("createdate")).Year.ToString, {CType(row("price"), Integer), totalobjects})

选项2             chartPriceHistory_STATIC.Series(seriesName).Points.AddXY(get3LetterMonth(CDate(row("createdate")).Month) + "-" + CDate(row("createdate")).Year.ToString, CType(row("price"), Integer))
chartPriceHistory_STATIC.Series("totalobjects").Points.AddXY(get3LetterMonth(CDate(row("createdate")).Month) + "-" + CDate(row("createdate")).Year.ToString, totalobjects)

两者都抛出同样的错误......我错过了什么?

    Dim mycommand As New SqlCommand("SELECT avgprice, createdate, totalobjects FROM avgprices", myConnection)
    Dim dtPrices As New System.Data.DataTable
    dtPrices.Columns.Add("price", System.Type.GetType("System.Int32"))
    dtPrices.Columns.Add("createdate", System.Type.GetType("System.DateTime"))
    dtPrices.Columns.Add("totalobjects", System.Type.GetType("System.Int32"))

    Dim dr As System.Data.DataRow

    Try
        Dim reader As SqlDataReader = mycommand.ExecuteReader()
        While reader.Read
            dr = dtPrices.NewRow()
            dr("price") = reader("price")
            dr("createdate") = reader("createdate")
            dr("totalobjects") = reader("totalobjects")
            dtPrices.Rows.Add(dr)
        End While
    Catch ex As Exception
    End Try

    ' Initializes a New instance of the DataSet class
    Dim myDataSet As DataSet = New DataSet()

    'Adds rows in the DataSet
    myDataSet.Tables.Add(dtPrices)

    chartPriceHistory_STATIC.Series.Clear()

    Dim seriesName As String = "Avg price"
    chartPriceHistory_STATIC.Series.Add(seriesName)
    chartPriceHistory_STATIC.Series(seriesName).XValueMember = "Date"

    chartPriceHistory_STATIC.ChartAreas.Add("ChartArea1")

    chartPriceHistory_STATIC.Series(seriesName).YValuesPerPoint = 2

    chartPriceHistory_STATIC.ChartAreas(0).AxisY.MajorGrid.Enabled = True
    chartPriceHistory_STATIC.ChartAreas(0).AxisY.Title = "Price"

    Dim totalobjects As Integer = 1


    chartPriceHistory_STATIC.Series.Add("Series2")
    chartPriceHistory_STATIC.Series("Series2").YAxisType = AxisType.Secondary
    chartPriceHistory_STATIC.Series("Series2").XValueMember = "Date"
    chartPriceHistory_STATIC.Series("Series2").YValueMembers = "totalobjects"
    chartPriceHistory_STATIC.Series("Series2").Name = "totalobjects"
    chartPriceHistory_STATIC.Series("totalobjects").ChartType = SeriesChartType.Line
    chartPriceHistory_STATIC.Series("totalobjects").ToolTip = "Total objects"


    chartPriceHistory_STATIC.Series(0).YAxisType = AxisType.Primary
    chartPriceHistory_STATIC.Series(1).YAxisType = AxisType.Secondary


    For Each row As DataRow In myDataSet.Tables(0).Rows
        totalobjects += 1

        'I tried: these 2 options, both generate the same error
        chartPriceHistory_STATIC.Series(seriesName).Points.AddXY(get3LetterMonth(CDate(row("createdate")).Month) + "-" + CDate(row("createdate")).Year.ToString, {CType(row("price"), Integer), totalobjects})

        chartPriceHistory_STATIC.Series(seriesName).Points.AddXY(get3LetterMonth(CDate(row("createdate")).Month) + "-" + CDate(row("createdate")).Year.ToString, CType(row("price"), Integer))
        chartPriceHistory_STATIC.Series("totalobjects").Points.AddXY(get3LetterMonth(CDate(row("createdate")).Month) + "-" + CDate(row("createdate")).Year.ToString, totalobjects)
    Next

    chartPriceHistory_STATIC.DataSource = myDataSet
    chartPriceHistory_STATIC.DataBind()

2 个答案:

答案 0 :(得分:1)

您需要为"平均价格"设置YValueMembers。系列也是。

添加此行(使用您想要在Y轴上绘制的任何字符串):

chartPriceHistory_Static.Series(seriesName).YValueMembers = "totalobjects"

在此行之前添加:

chartPriceHistory_Static.Series(seriesName).YValuesPerPoint = 2

此外,您的日期/创建列名称不一致 - 在您更正之前,您不会看到这些图。

如果您只添加1个YValue,则可以再次将YValuesPerPoint降低到1,而不会出错。

测试。工作良好。干杯!

答案 1 :(得分:0)

尝试通过新类创建点并将其添加到图表

,而不是使用Points.AddXY方法
foreach (var result in data)
                {
                    point = new DataPoint();
                    point.AxisLabel = result.XData;

                    point.YValues = new double[] { result.YData };

                    point.Color = result.Color;
                    seriesDetail.Points.Add(point);

                }