Merscy Ответов: 1

Как получить данные за 7 дней из datagridview для отображения на графике?


Привет,
Поэтому мне нужна неделя данных, причем ячейка 0 в моем datagridview является столбцом даты (который будет отображаться как ось X для моей диаграммы), а ячейка 1 в моем datagridview является столбцом данных (который будет отображаться как Ось Y для моей диаграммы).

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

Итак, в конце концов, я хочу, чтобы диаграмма отображала данные либо еженедельно (7 дней), либо (если выбрана другая вкладка) ежемесячно (31 день) с сортировкой данных в datagridview.

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

Надеюсь, это имеет смысл!!

Что я уже пробовал:

Private Sub tmrMonitor_Tick(sender As Object, e As EventArgs) Handles tmrMonitor.Tick
        Dim Y As Integer
        Dim X As Date

        Dim StartDate As DateTime = "18/07/2020"
        Dim EndDate As DateTime = "17/08/2020"

        Select Case tbctrlDisplay.SelectedIndex
            Case 0
                While counter < dgvUserData.RowCount
                    Do Until counter = 7
                        Date.TryParse(dgvUserData.Rows(counter).Cells(0).Value, X)
                        lblTimeMonitored.Text = X.ToString
                        Integer.TryParse(dgvUserData.Rows(counter).Cells(1).Value, Y)
                        lblPulseValue.Text = Y.ToString()

                        If StartDate <= X And EndDate >= X Then

                            counter = counter + 1
                            chrtWeekly.Series("Beats Per Minute").Points.AddXY(X.ToString, Y.ToString)
                        End If
                    Loop
                End While

                
        End Select

1 Ответов

Рейтинг:
0

Garth J Lancaster

Не обращай внимания - я неправильно понял твой вопрос Что бы я сделал, это прикрепил привязку/источник данных к DataGridView, а затем установил фильтр на (что угодно) .. например,

bs.Filter = string.Format("Date Between #{0:yyyy/MM/dd}# And #{1:yyyy/MM/dd}#", startDate, endDate);

Хорошо, вы не говорите, как заполняется ваш datagridview .. Обычно я нахожу, что использование BindingSource дает большую гибкость (именно поэтому я пошел по касательной в своей первой мысли) .. поэтому я бы предложил посмотреть на использование datatable и bindingsource для вашего диаграмма . это дает немного гибкости, в том числе
1) я думаю, что вы могли бы заполнить диаграмму datatable с помощью linq из datagridview datatable, то есть запроса между вашими двумя диапазонами данных
2) Вы можете вручную заполнить диаграмму datatable либо непосредственно из вашего datagridview, либо из datagridview datatable
3) Вы могли бы предположительно использовать один и тот же фильтр bindingsource как для datagridview, так и для диаграммы

Я не делал этого уже целую вечность, но я думаю, что изменение datatable или bindingsource вызывает обновление, а именно так ваша диаграмма будет "перерисовываться", когда вы меняете данные/фильтр - или я почти уверен, что достаточно легко "сказать диаграмме обновиться" - что покрывает это "желание"
Цитата:
Итак, в конце концов, я хочу, чтобы диаграмма отображала данные либо еженедельно (7 дней), либо (если выбрана другая вкладка) ежемесячно (31 день) с сортировкой данных в datagridview.
[Edit] стоит взглянуть на то, может ли источник привязки диаграммы выбрать столбцы из datagridview datatable ? если это так, то ваша работа еще проще - это может помочь Привязка данных к рядам (элементы управления диаграммами) | Microsoft Docs[^] [/Редактировать]


Merscy

Да, извини, я забыл сказать. У него есть привязка с доступом.