Управление диаграммой ASP.NET MS: ошибка вставки точек данных. Для этого ряда данных можно задать только 2 значения Y. Имя параметра: источник данных

Я получаю эту ошибку в своем элементе управления MS Chart:

Ошибка вставки точек данных. Для этого ряда данных можно задать только 2 значения Y. Имя параметра: источник данных

Это происходит в строке chartPriceHistory_STATIC.DataBind() в моем коде ниже.

Я думаю, что это как-то связано с тем, как я добавляю очки (AddXY), но не могу понять, что это такое.

Я попробовал эти 2 варианта кода:

Вариант 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()

person Flo    schedule 28.02.2018    source источник
comment
Вероятно, у вас есть дубликат в X Value (Date)? ряд. вы не можете ввести диаграмму, например, x: 1/1/2000 y2 и x: 1/1/12000 y: 3 не имеют смысла   -  person Norbert Ziemniak    schedule 28.02.2018
comment
Дважды проверил это, но нет, у меня есть 7 уникальных значений: июль-2017, сентябрь-2017, октябрь-2017, ноябрь-2017, декабрь-2017, январь-2018, февраль-2018.   -  person Flo    schedule 28.02.2018


Ответы (2)


Вам также необходимо установить YValueMembers для серии "Средняя цена".

Добавьте эту строку (используйте любую строку, которую вы хотите отобразить по оси Y):

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

Добавьте его непосредственно перед этой строкой:

chartPriceHistory_Static.Series(seriesName).YValuesPerPoint = 2

Кроме того, ваше имя столбца даты/создания несовместимо - вы не увидите графики, пока не исправите это.

Если вы добавляете только 1 YValue, вы можете снова уменьшить YValuesPerPoint до 1 без ошибки.

Протестировано. Работает отлично. Ваше здоровье!

person Chalky    schedule 12.03.2018
comment
Спасибо, действительно работает! Я использовал код в своем посте выше и добавил ваши предложения. кстати: мне также нужно было удалить эту строку из моего кода chartPriceHistory_STATIC.DataSource = myDataSet - person Flo; 12.03.2018
comment
Да, в отношении удаления источника - у вас есть дублированные функции - вы можете в качестве альтернативы избавиться от строк, в которых вы повторяете набор данных и добавляете точку. - person Chalky; 12.03.2018

Вместо использования метода 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);

                }
person MCoder    schedule 01.03.2018
comment
Я не уверен, что вы здесь делаете... Мне нужны 2 точки данных Y... поэтому, даже если я добавлю 2 значения к point.YValues, что это за seriesDetail.Points.Add(point)? Не могли бы вы привести пример на основе моего примера кода? Заранее спасибо! :-) - person Flo; 04.03.2018
comment
Вы пробовали решение, которое я предложил? - person MCoder; 07.03.2018
comment
Да, но см. мой первый комментарий, не могли бы вы предоставить образец, основанный на моих требованиях и коде? - person Flo; 09.03.2018
comment
Завтра смогу, сегодня занят. - person MCoder; 09.03.2018