2014-11-20 3 views
0

VB.NET WinForms 응용 프로그램에서 첫 번째 열의 바인딩되지 않은 열로 확인란이있는 DataGridView가 있습니다. 체크 박스가 선택된 각 행에 행 모음을 추가해야합니다.DataGridView 행을 반복 할 때 모든 행을 가져 오지 못함

For Each row As DataGridViewRow In dgvEmployees.Rows 

    Dim chkCell As DataGridViewCheckBoxCell = DirectCast(row.Cells(0), DataGridViewCheckBoxCell) 
    If Convert.ToBoolean(chkCell.Value) = True Then 
     Console.WriteLine("This should be the Emp No of the checked row: " & row.Cells(1).Value.ToString()) 
    End If 

Next 

을하지만 체크 체크 박스와 마지막 행을 누락되었습니다

나는 행을 반복하고 체크 체크 박스를 가진 사람을 찾기 위해 아래의 코드를 사용하고 있습니다. 나는. 세 개의 체크 박스를 체크하면 콘솔 출력에서 ​​처음 두 체크 된 행의 "Emp No"가 표시됩니다.

카운터를 사용하는 반복하고 제로 인덱싱에 문제처럼 행동했다, 나는 또한 시도 생각 :

For rowNum As Integer = 0 To dgvEmployees.Rows.Count - 1 
    Dim currentRow As DataGridViewRow = dgvEmployees.Rows(rowNum) 
    Dim chkCell As DataGridViewCheckBoxCell = DirectCast(currentRow.Cells(0), DataGridViewCheckBoxCell) 

    If Convert.ToBoolean(chkCell.Value) = True Then 
     Console.WriteLine("This should be the emp no of the checked row: " & currentRow.Cells(1).Value.ToString()) 
    End If 

Next 

을하지만 그 코드와 같은 동작을 얻을. 정수 = 0 및 Rows.Count - 1, 등 주위를 변경 시도했지만 그 중 하나도 도움이되지 않았다.

중요한 경우 DataGridView의 SelectionMode를 CellSelect로 설정해야합니다.

UPDATE DataGridView에 의해 채워되고 있음을 테이블에 694 레코드가

.

은 내가 rows.count 값을 얻을 수있는 콘솔 출력을 추가 :

Console.WriteLine("Num rows: " & dgvEmployees.Rows.Count) 

을 인해 DataGridView에의 마지막 행에 의미가 695을 가지고 새 행의 항목을 허용하는이 .

나는 또한 첫째로, 바로 체크 체크 박스의 경우 검사 전에

Console.WriteLine("Row index: " & chkcell.RowIndex) 

를 추가 - (1 번째 반복의 방법이 차지하는 것입니다하지만 백작은 생각했을 것이다.)

Num rows: 695 
Row index: 0 
this should be the emp no of the checked row: ACS175 
Row index: 1 
Row index: 2 
this should be the emp no of the checked row: AJAW03 
Row index: 3 
Row index: 4 
Row index: 5 
Row index: 6 

가 있었어야을에 "이 ...해야한다"출력 행의 인덱스 후 : 4 라인, 세 번째와 다섯 번째 행은 여기에 출력 뭔지 (0, 2, 4 인덱스)를 확인.

+0

마지막으로 확인 된 행이 표의 마지막 행입니까? 디버거를 사용하여 단계별로 dgvEmployees.Rows.Count의 값이 그리드에 표시되는 행의 수와 일치하는지 확인할 수 있습니까? –

+0

@CaseyWilkins, 그 덕분에, 반복 동안 행 수 및 인덱스 출력에 대한 세부 정보를 내 질문에 업데이트했습니다. – marky

+0

디버거를 사용하여 처음 5 단계 또는 6 단계를 반복하면서 단계별로 chkCell.Value를 확인 했습니까? –

답변

1

확인한 마지막 체크 상자는 포커스를 확인한 후에 다른 셀로 이동하지 않으므로 DataGridView에서 커밋하지 않는 것처럼 보입니다. 반복 코드를 실행하기 전에 다음을 시도하십시오.

If dgvEmployees.IsCurrentCellDirty Then 
    dgvEmployees.CommitEdit(DataGridViewDataErrorContexts.Commit) 
End If 
+0

그랬어, 케이시. (그래도 해킹 같은 느낌) 시간 내 주셔서 감사합니다. – marky