#vb.net #datatable
#vb.net #datatable
Вопрос:
У меня есть таблица данных ниже, и я хотел проверить условие, если общее количество последних столбцов превышает 7, тогда функция что-то сделает, но мое текущее решение способно только подсчитывать число 1 в таблице данных, но не может определить, что значение 1 является последовательным из столбца 7 в столбец 14.
-------------------------------------------------------------------
Id | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
-------------------------------------------------------------------
kek | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Решение
Sub CheckExtraday()
Dim count1 As Integer = 0
Dim sql As String = "Select * from LeaveSystem WHERE EmpID ='" Session("empID") "' and Year='" Session("year") "' and Month='" Session("month") "'"
Dim dt As DataTable = getDTms(sql)
For I As Integer = 0 To dt.Rows.Count - 1
For k As Integer = 2 To dt.Columns.Count - 1
If dt.Rows(I).Item(k).Equals("1") = True Then
count1 = count1 1
End If
Next k
Next I
If count1 > 7 Then 'output = 10
'do something
End If
End Sub
Редактировать :
последовательный подсчет от столбца 11 месяца 5 до столбца 1-5 месяца 6
----------------------------------------------------------------------------
Id | month | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
----------------------------------------------------------------------------
kek | 5 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
kek | 6 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Комментарии:
1. Я не вижу в этом никакого смысла
find_rows
. Почему бы тебе просто не использоватьdt.Rows(I)
вместо этого?2. Я понял, что в моем коде есть избыточность, и я отредактировал его.
Ответ №1:
Если я вас правильно понял, вы, похоже, пытаетесь получить количество последовательных ячеек, которые имеют значение 1
. Если это так, вы можете просто сбросить значение count1
всякий раз, когда значение ячейки не 1
:
If dt.Rows(I).Item(k).ToString() = "1" Then
count1 = 1
Else
count1 = 0
End If
Если вы хотите сохранить последние последовательные 1
значения, даже если за ними следуют нули, вы можете сделать что-то вроде этого:
Dim latestConsecutiveCount As Integer
If dt.Rows(I).Item(k).ToString() = "1" Then
count1 = 1
Else
latestConsecutiveCount = count1
count1 = 0
End If
If latestConsecutiveCount > someValue Then
' Do something
End If
Комментарии:
1. Разве это не привело бы к 0 для строки типа 1,0,0,1,0,1,1,1,1,1,0,0 тогда?
2. @CharlesMay Это верно, но, похоже, это то, чего хотел ОП: «Я хотел проверить условие, если общее количество последних столбцов превышает 7″ .
3. Да, вы правы, я этого не уловил и подумал, что любые 7 последовательных. Извините.
4. Похоже, что OP хочет, чтобы количество последних определялось по идентификатору, поэтому вам придется изменить свой код, чтобы упорядочить по идентификатору, затем начать с конца и работать до тех пор, пока он не встретит «0»
5. спасибо @AhmedAbdelhameed, извините за беспокойство, но у меня есть последний вопрос: что мне делать, если я хочу, чтобы количество последовательных строк продолжалось от одной строки к другой строке?