vb.net диаграмма — используйте ту же диаграмму для другого набора данных

#vb.net #charts

#vb.net #Диаграммы

Вопрос:

Код выдает System.ArgumentOutOfRangeException ошибку, потому что ряд кажется несуществующим. Когда я пытаюсь отладить один шаг, добавьте серию снова, выдает ошибку, потому что серия уже существует…

 For Each row As DataRow In dt.Rows
    Chart1.Series.Add(row("Counter"))
    Chart1.Series(i).ChartType = Charting.SeriesChartType.StackedColumn
    Chart1.Series(i).Label = 1
    Dim dp As Charting.DataPoint = New Charting.DataPoint()
    Dim sDay As String = row("Tag")
    If i = 0 Then
        sDayRowBefore = sDay
    Else
        If sDayRowBefore <> sDay Then
            iSeriesIndex = iSeriesIndex   1
        End If
    End If
    dp.XValue = iSeriesIndex
    Chart1.Series(i).IsXValueIndexed = True
    dp.AxisLabel = row("Tag")
    dp.SetValueY(1)
    dp.Color = row("ItemFarbe")
    Chart1.Series(row("Counter")).Points.Add(dp)
    sDayRowBefore = sDay
    Chart1.DataManipulator.Filter(Charting.CompareMethod.EqualTo, 0, Chart1.Series(i))
    i = i   1
Next
 

Ошибка возникает только тогда, когда я снова использую ту же диаграмму для другого набора данных.
Перед созданием диаграммы я очищаю ряды, точки и область диаграммы.

 For Each var As Charting.Series In Chart1.Series
        var.Points.Clear()
Next
 

Комментарии:

1. Итак, с первого раза все dt работает нормально. Затем вы запускаете For Each var цикл для Clear Points каждого существующего Series в данный момент. Во второй раз вы установили dt какое-то другое DataTable значение и Chart1.Series(i).ChartType выдаете свое исключение? Это правильно? Каковы значения i и Count свойства SeriesCollection ? Если вы воссоздаете SeriesCollection каждый раз, почему вы не вызываете Series.Clear() вместо очистки точек?

2. @topshot Извините, я не был здесь более конкретным. Chart1.Series(row("Counter")).Points.Add(dp) вызывает выполнение. Значение i равно 0 -> рабочее, поскольку ряд был добавлен правильно, я не могу добавить ее снова. Количество наборов серий равно 1

3. И да, я также очищаю серию, просто не публикую код. Chart1.Series.Clear() Chart1.Legends.Clear() Chart1.ChartAreas.Clear()

4. Надеюсь, я нашел ошибку, но мне нужен кто-то, кто подтвердит это. Я попытался сослаться на серию по имени с помощью Chart1.Series(строка («Счетчик»)), которая возвращает значение int из dt. Вместо названия серии, на которое ссылается этот индекс, в моем случае строка «Счетчик» возвращала 6, а индекса 6 там не было. Что подводит меня к вопросу: как ссылаться на серию по названию?

5. Диаграмма 1.Series(«6»)