2017-01-27 1 views
0

매우 간단해야한다고 생각하는 문제가 있습니다. 그러나 작동하지 않을 수 있습니다. 내가하고있는 일이라고 확신하지만 전문가의 도움이 필요합니다. 나는 단순히 데이터 테이블을 순환하여 데이터 테이블의 다른 열에 값이 다시 나타나는지 확인하려고합니다. 어떤 이유로 BOTH 문이 실행되고 else 문이 If 문을 덮어 씁니다.Block이 If와 Else 문 모두를 실행하는 경우

For i = 0 To length - 1 
     For j = 0 To length - 1 
      If Trim(dt.Rows(i)(0)) = Trim(dt.Rows(j)(6)) Then 
       need_dt.Rows(i)(9) = "COMP" 
       need_dt.Rows(i)(10) = Format(resource.AddWorkingDays(need_dt.Rows(i)(2), -5), "MM/dd/yy") 
      Else 
       need_dt.Rows(i)(9) = "TOP" 
       need_dt.Rows(i)(10) = Format(resource.AddWorkingDays(need_dt.Rows(i)(2), -16), "MM/dd/yy") 
      End If 
      If Year(need_dt.Rows(i)(10)) = 2029 Then need_dt.Rows(i)(10) = Format(resource.AddWorkingDays(Now, 14), "MM/dd/yyyy") 
     Next 
    Next 
+0

오신 것을 환영합니다! 예제 데이터도 게시 할 수 있습니까? 가능한 각 루프에 대한 가독성을 위해 인덱스를 사용하여 열에 액세스하는 대신 열 이름을 사용하십시오. 예를 들어, myRow ("myColumn"). 데이터 테이블 내부에서 행을 검색하려면 [select-method] (https://msdn.microsoft.com/en-us/library/det4aw50 (v = vs.110) .aspx) 또는 Linq. – Esko

+0

첫 번째 추측은 'j'의 반복 중 하나에서 'Trim (dt.Rows (i) (0))'<>'트림 (dt.Rows (j) (6)) ' 따라서 다른 두 사람은 모두 "불"으로 보이고 있습니다. – OSKM

+0

내부 루프를 다음과 같이 시도하십시오. j = i + 1 길이 - 1. –

답변

0

내가 열 0의 값은 모든 행의 열 여섯에있는 경우 사용자가 설정 열 번호 9 = "COMP"를 원하는 알고있는 것처럼. 문제는이 경우

은 - 열 아홉의 값은 당신이 필요로하는 코드에서 "TOP"

덮어 씁니다 - 마지막 행에서 열 여섯의 마지막 값은 열 1의 값과 동일하지 않은> 경우 동일한 값을 찾은 후 루프에서 빠져 나오십시오.

은 그러나 나는 또한 가능한 형식 변환 오류에 대한 시간 피드백을 컴파일 줄 Option Strict On을 설정하는 것이 좋습니다 접근 방식을 더 읽기

For Each row As DataRow in need_dt.Rows 
    Dim firstColumnValue As String = row.Field(Of String)("0ColumnName").Trim() 

    Dim is6ColumnContainValue As Func(Of DataRow, Boolean) = 
     Function(dtRow) dtRow.Field(Of String)("6ColumnName").Trim() = firstColumnValue 

    Dim isValueFound = need_dt.AsEnumerable().Any(is6ColumnContainValue) 

    Dim tenthColumnValue AS Date = row.Field(Of Date)("10ColumnName") 
    Dim workingDaysToAdd As Integer 

    If IsValueFound = True Then 
     row.SetField("9ColumnName", "COMP") 
     workingDaysToAdd = -5 
    Else 
     row.SetField("9ColumnName", "COMP") 
     workingDaysToAdd = -16 
    End If   

    If TenthColumnValue.Year = 2029 Then 
     tenthColumnValue = resource.AddWorkingDays(Date.Now, 14) 
    Else 
     tenthColumnValue = resource.AddWorkingDays(tenthColumnValue, workingDaysToAdd) 
    End If 

    row.SetField("10ColumnName", tenthColumnValue) 
Next 

을 조금 입찰을 사용하는 것이 좋습니다

+0

정말 고마워요. 나는 그것이 명백한 무엇인가를 놓치고있는 것이었다라는 것을 알고 있었다. 응답 시간을내어 주셔서 감사합니다. – Jmoran

2

else 문은 모든 행에서 실행됩니다 찾을 수 없습니다. 결과를 변수에 보관하고 끝에 원하는 작업을 수행해야합니다. 다른 If 문은 j를 사용하지 않으므로 모든 j에서 수행 할 필요가 없습니다.

For i = 0 To length - 1 
     Dim isFound As Boolean = False 

     For j = 0 To length - 1 
      If Trim(dt.Rows(i)(0)) = Trim(dt.Rows(j)(6)) Then 
       isFound = True 
       Exit For 
      End If 
     Next 

     If isFound Then 
      need_dt.Rows(i)(9) = "COMP" 
      need_dt.Rows(i)(10) = Format(resource.AddWorkingDays(need_dt.Rows(i)(2), -5), "MM/dd/yy") 
     Else 
      need_dt.Rows(i)(9) = "TOP" 
      need_dt.Rows(i)(10) = Format(resource.AddWorkingDays(need_dt.Rows(i)(2), -16), "MM/dd/yy") 
     End If 


     If Year(need_dt.Rows(i)(10)) = 2029 Then need_dt.Rows(i)(10) = Format(resource.AddWorkingDays(Now, 14), "MM/dd/yyyy") 
    Next