2014-11-20 3 views
0

VB.NET WinForms 프로젝트에서 datagridview를 데이터 집합으로 채 웁니다. 사용자가 버튼을 클릭하면 DGV에 새로운 행이 있는지 확인해야하며, 그렇다면 데이터베이스에 삽입 할 행 모음을 가져와야합니다. (DGV 속성 AllowUserToAddRows가 True로 설정되어 있으므로 DGV 하단에 행이 있습니다.)DataGridView에 새 행이 추가되었는지 확인하십시오. 그렇다면 새 행 모음을 얻으십시오.

내가 가장 진전을 보일 수 있었던 가장 가까운 부분은 다음과 같았습니다. 이로 인해 혼합 결과가 발생했습니다. 코드는 새 행 에서 값을 가져 오지만 사용자가 새 행을 클릭 한 경우에만 값을 가져옵니다. 포커스가 새 행을 떠나지 않으면 마치 행이 새 행의 콜렉션 뒤에 숨겨진 것에 추가되지 않은 것입니다. (새 행을 클릭 한 다음 다시 열어).

If EmployeesDataSet.HasChanges(DataRowState.Modified Or DataRowState.Added) Then 
    Dim changesDataSet As DataSet = EmployeesDataSet.GetChanges(DataRowState.Modified Or DataRowState.Added) 
    Dim changesTable As DataTable 

    For Each changesTable In changesDataSet.Tables 
     Console.WriteLine("TableName: " & changesTable.TableName) 
     For Each row As DataRow In changesTable.Rows 
      Dim column As DataColumn 
      For Each column In changesTable.Columns 
       Console.Write("Value: " & row(column).ToString() & ControlChars.Tab & ", ") 
      Next column 
      Console.WriteLine() 
     Next 
    Next 

End If 

CaseyWilkins가 비슷한 문제 here을 도와주었습니다. 내가

If dgvEmployees.IsCurrentRowDirty Then 
    dgvEmployees.CommitEdit(DataGridViewDataErrorContexts.Commit) 
End If 

을 시도하지만 그것을하지 않았다 비추어

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

:이 경우, 변경된 셀에 초점을두고이 코드를 추가 할 필요.

"작동하려면 새 행을 클릭해야합니다"라는 지침을 잘 포함 할 수 없습니다! :)

답변

0

LarsTech 가까이이었다. EndEdit() 메서드는 DataGridView의 BindingSource에서 호출해야했습니다. 그래서 내 솔루션은

EmployeesBindingSource.EndEdit() 

바로 저장 버튼의 클릭 이벤트 시작 부분에있었습니다.

대답은 this page입니다.

0

새로운 행이 편집 모드에 아마 아직, 그래서 시도 :

dgvEmployees.EndEdit(); 
+0

그건 다 끝났어. 좀 더 연구가 필요했지만, 나는 그것을 발견했다. 내 대답을 보라. – marky

1

이 시도 : 이것은 새로운 또는 편집 된 행의 유효성을 검사 DGV을 강제

dgvEmployees.CurrentCell = Nothing

. 업데이트 명령 전에이 작업을 수행하십시오. 그것은 작동해야합니다.

관련 문제