Создание оси X для отдела и оси Y для общего тикета на основе datagridview vb.net - PullRequest
0 голосов
/ 12 ноября 2018

Я новичок в VB. у меня есть datagridview, который извлекает данные из файла Excel. Мои данные выглядят как это , Я хочу создать столбчатую диаграмму, где ось X - это Департамент, а ось Y - это общая сумма заявки о состоянии, которая открыта и закрыта. Ниже приведен мой код, который я застрял, и я знаю, что получаю ошибки, но это идея.

я хочу получить результат как this

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Me.Chart1.Series("Open").Points.AddXY("Finance", value)
    Me.Chart1.Series("Open").Points.AddXY("ITMS", value)
    Me.Chart1.Series("Open").Points.AddXY("RV", value)
    Me.Chart1.Series("Open").Points.AddXY("Security", value)

    Me.Chart1.Series("Close").Points.AddXY("Finance", value)
    Me.Chart1.Series("Close").Points.AddXY("ITMS", value)
    Me.Chart1.Series("Close").Points.AddXY("RV", value)
    Me.Chart1.Series("Close").Points.AddXY("Security", value)



    For Count As Integer = 0 To DataGridView1.Rows.Count - 2
        Chart1.Series("Open").Points.AddXY(DataGridView1.Item(1, Count).Value, DataGridView1.Item(1, Count).Value)
        Chart1.Series("Close").Points.AddXY(DataGridView1.Item(1, Count).Value, DataGridView1.Item(1, Count).Value)

    Next
End Sub

Конечный класс

1 Ответ

0 голосов
/ 14 ноября 2018

Из того, что я могу расшифровать по изображениям данных и графика… вы хотите количество билетов «открыть-закрыть» из «Финансы» для первых двух точек данных на графике.Другие пункты - это отделы ITMS, RV и Security. Проблема с размещенным кодом заключается в том, что текущий цикл не «добавляет» «открытые» или «закрытые» заявки для каждого отдела.Код просто «добавляет» другую точку на график вместо «добавления 1» к существующей точке.

Трассировка размещенного цикла for с использованием рисунка данных сетки, это добавит в общей сложности девять (9) точек на графике, «ТО ЖЕ ВСЕ» девять точек находятся в обоих окнах «Открыть / Закрыть»серии.Однако, поскольку такие отделы, как «Финансы», имеют три (3) точки с одинаковым значением, это будет отображаться на диаграмме как три (3) отдельных «отдела» «Финансы»… именно здесь вам необходимо «добавить» 1 кзначение существующей точки «Открытие / закрытие финансов», а не просто добавление «другой» точки «Открытие / закрытие финансов».

Код должен будет циклически проходить по строкам сетки и накапливать общее числострок, которые имеют «Финансы» И «Открыть», «Финансы» И «Закрыть», «ITMS» И «Открыть»… и т. д. Это даст вам значения «y» графиков для каждого открытия / закрытия отдела.Учитывая это, одним из возможных решений является написание метода, который принимает два строковых параметра (отдел, статус) и возвращает целое число, которое содержит номера строк, которые соответствуют «и» отделу, и статусу.Они станут точками данных для диаграммы.В этом примере вы добавляете только восемь (8) точек данных: одна для «Финансы», «Открыть», другая для «Финансы», «Закрыть» ... и т. Д. ... Надеюсь, это имеет смысл.

Нижеэто простая петля по сетке строк, которая накапливает восемь точек.Описанный выше метод не обязательно является лучшим подходом, если набор данных большой.Описанный метод будет циклически проходить по сетке восемь (8) раз.Один раз для «Финансы» и «Открыть», другой цикл по сетке, чтобы получить «Финансы», «Закрыть»… и т. Д. Приведенный ниже код проходит по сетке только «один раз», однако этот подход требует добавления 8 переменных.Выбери свой яд ... надеюсь, это поможет.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ' 8 variables to hold the totals
    Dim FinanceOpenCount = 0
    Dim FinanceCloseCount = 0
    Dim ITMSOpenCount = 0
    Dim ITMSCloseCount = 0
    Dim RVOpenCount = 0
    Dim RVCloseCount = 0
    Dim SecurityOpenCount = 0
    Dim SecurityCloseCount = 0
    ' loop through each row and "ADD" 1 to the proper variables 
    For Each row As DataGridViewRow In DataGridView1.Rows
        Select Case row.Cells("Department").Value
            Case "Finance"
                If (row.Cells("Status").Value = "Open") Then
                    FinanceOpenCount += 1
                Else
                    FinanceCloseCount += 1
                End If
            Case "ITMS"
                If (row.Cells("Status").Value = "Open") Then
                    ITMSOpenCount += 1
                Else
                    ITMSCloseCount += 1
                End If
            Case "RV"
                If (row.Cells("Status").Value = "Open") Then
                    RVOpenCount += 1
                Else
                    RVCloseCount += 1
                End If
            Case "Security"
                If (row.Cells("Status").Value = "Open") Then
                    SecurityOpenCount += 1
                Else
                    SecurityCloseCount += 1
                End If
        End Select
    Next
    ' add the points to the chart
    Chart1.Series("Open").Points.Clear()
    Chart1.Series("Close").Points.Clear()
    Chart1.Series("Open").Points.AddXY("Finance", FinanceOpenCount)
    Chart1.Series("Close").Points.AddXY("Finance", FinanceCloseCount)
    Chart1.Series("Open").Points.AddXY("ITMS", ITMSOpenCount)
    Chart1.Series("Close").Points.AddXY("ITMS", ITMSCloseCount)
    Chart1.Series("Open").Points.AddXY("RV", RVOpenCount)
    Chart1.Series("Close").Points.AddXY("RV", RVCloseCount)
    Chart1.Series("Open").Points.AddXY("Security", SecurityOpenCount)
    Chart1.Series("Close").Points.AddXY("Security", SecurityCloseCount)
End Sub

Метод многократного зацикливания, описанный выше.

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Chart2.Series("Open").Points.Clear()
    Chart2.Series("Close").Points.Clear()
    Chart2.Series("Open").Points.AddXY("Finance", GetDeptStatusCount("Finance", "Open"))
    Chart2.Series("Open").Points.AddXY("ITMS", GetDeptStatusCount("ITMS", "Open"))
    Chart2.Series("Open").Points.AddXY("RV", GetDeptStatusCount("RV", "Open"))
    Chart2.Series("Open").Points.AddXY("Security", GetDeptStatusCount("Security", "Open"))

    Chart2.Series("Close").Points.AddXY("Finance", GetDeptStatusCount("Finance", "Close"))
    Chart2.Series("Close").Points.AddXY("ITMS", GetDeptStatusCount("ITMS", "Close"))
    Chart2.Series("Close").Points.AddXY("RV", GetDeptStatusCount("RV", "Close"))
    Chart2.Series("Close").Points.AddXY("Security", GetDeptStatusCount("Security", "Close"))
End Sub

Private Function GetDeptStatusCount(department As String, status As String) As Int32
    Dim count = 0
    For Each row As DataGridViewRow In DataGridView1.Rows
        If (row.Cells("Department").Value = department And row.Cells("Status").Value = status) Then
            count += 1
        End If
    Next
    Return count
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...