Из того, что я могу расшифровать по изображениям данных и графика… вы хотите количество билетов «открыть-закрыть» из «Финансы» для первых двух точек данных на графике.Другие пункты - это отделы 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