2017-12-29 5 views
0

3 열이있는 DataGridview에서 반복 문제가 발생했습니다. 열 1, 2 및 3셀 값을 기준으로 DataGridview 행에 루프를 적용하는 방법

"Column2"값이 75 이상인 경우 "Column3"값이 "Column1"과 같은 경우입니다. 그밖에 "COLUMN3는"0

에 그리고 만약 같다 "열 2"값이 "IP"또는 "NFE가", "COLUMN3"값은 그림 같은 0 아래

같다입니다 :

Column1 Column2 Column3 
    3   78  3 
    3   76  3 
    3   65  0 
    3   IP  0 
    3  NFE  0 

이 코드를 사용해 보았습니다.

Private Sub DGVGRADES_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DGVGRADES.CellValueChanged 
    For Each row As DataGridViewRow In DGVGRADES.Rows 
     If row.Cells(4).Value >= 75 Then 
      row.Cells(0).Value = row.Cells(3).Value 
     ElseIf row.Cells(4).Value.ToString <= 3 Then 
      row.Cells(0).Value = row.Cells(3).Value 
     ElseIf row.Cells(4).Value < 75 Then 
      row.Cells(0).Value = 0 
     ElseIf row.Cells(4).Value = "IP" Then 
      row.Cells(0).Value = 0 
     End If 
    Next 
End Sub 

그러나이 오류를 반환합니다.

"IP"문자열에서 "Double"유형으로의 변환이 유효하지 않습니다.

학교 요구 사항에 대한 도움이 정말 필요했습니다. 감사합니다

+3

오류 메시지는 자체적으로 설명됩니다. 문자열 "IP"와 "NFE"의 값을 먼저 테스트하십시오. 그런 다음 값을 숫자로 변환 (오류 검사)하고 숫자 값을 테스트하십시오. – Blackwood

+0

샘플 코드를 보여줄 수 있습니까? 특정 숫자와 같은 문자열을 선언 했는데도 동일한 결과가 나타납니다. – user9153800

+0

테이블이 DataGridview에 묶여 있다고 생각하십니까? 그렇다면 열의 데이터 유형이 데이터 테이블에 의해 결정됩니다. 그렇다면 인덱스 4에서 열을 문자열로 바꿉니다. DGVGRADES.Columns (4) .ValueType = GetType (String) – Chillzy

답변

0

이것은 숙제를위한 쉬운 수정이어야합니다. 하지만 답을 복사하여 붙여 넣는 것이 아니라 코드를 이해해야합니다.

Private Sub DGVGRADES_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DGVGRADES.CellValueChanged 
    For Each row As DataGridViewRow In DGVGRADES.Rows 
     If Double.TryParse(row.Cells(4).Value, Nothing) = False Then 
      If row.Cells(4).Value.ToString = "NFE" Then 
       row.Cells(0).Value = 0 
      ElseIf row.Cells(4).Value.ToString = "IP" Then 
       row.Cells(0).Value = 0 
      End If 
     Else 

      If row.Cells(4).Value >= 75 Then 
       row.Cells(0).Value = row.Cells(3).Value 
      ElseIf row.Cells(4).Value.ToString <= 3 Then 
       row.Cells(0).Value = row.Cells(3).Value 
      ElseIf row.Cells(4).Value < 75 Then 
       row.Cells(0).Value = 0 
      End If 
     End If 
    Next 
End Sub 
+0

잘 작동하지만 "IP"를 75 이상으로 변경하면 row.cells (0) .value는 row.cells (3) .value와 같다고 가정하지 않습니다. – user9153800

+0

@ user9153800 그리드는 3 열 이상이어야합니다. 이 예제는 3 열 그리드를 기반으로합니다. 분명히 코드가 앱과 함께 작동하는지 여부는 개발자가 결정해야합니다. 이것은 귀하의 문제를 극복하는 방법을 보여주는 예일뿐입니다. 답변도 투표하십시오! ;) – Chillzy