나는이 동일한 문제를 주장하는 bazillion 게시물을 보았을 것이라고 약속합니다. 그래서 나는 아직도 저주를 받았다고 용서해주십시오.VB.net DataRow.RowState가 업데이트되지 않습니다
강력한 형식의 데이터 집합을 포함하는 VS2008 스마트 장치 프로젝트가 있습니다. 사용자는 데이터 집합에 새 레코드를 만들 때마다 값을 입력하고 저장 할 수 있습니다. 사용자가 값을 편집하려면 행을 편집 할 수있는 입력에 사용할 수있는 값이 들어있는 여러 개의 콤보 상자가있는 모달 자식 양식이 표시됩니다. 각 콤보 상자가 아래의 방식으로 자식 폼의 생성자에 바인딩 :
With cmbSize
.DataSource = frmMain.dstConfig.Sizes
.DisplayMember = "Display"
.ValueMember = "Value"
.DataBindings.Add("SelectedValue", trowNewRow, "SIZE", True, DataSourceUpdateMode.OnPropertyChanged)
End With
dstConfig이 제약 조건을 포함하는 테이블의 데이터 집합입니다. 소스의 디스플레이 및 값 구성원에 바인딩하면 정상적으로 작동합니다.
trowNewRow는 사용자가 편집 절차를 시작할 때 기본 양식에서 전달 된 데이터 세트의 행에 대한 참조이며 행을 매개 변수 "ByRef"로 전달하여 하위 양식으로 전달합니다. 강력한 타이핑이 보존됩니다. 이 일이 발생했을 때 내가 알지 못하는 일종의 단절이있을 수 있습니다. 데이터 세트에서 "선택"절차를 수행하고 편집 할 행에 해당하는 고유 한 ID 필드로 필터링하여 참조를 전달합니다. 결과는 첫 번째 (및 유일한) 항목을 내 객체로 전달하는 데이터 세트와 동일한 스키마의 강력한 유형의 행이있는 단일 항목 배열입니다.
사용자가 확인 버튼을 클릭하여 변경 사항을 제출하면 변경 사항이 실제로 수행되었는지 여부를 평가하는 절차가 트리거됩니다. 이 작업을 수행하는 가장 좋은 방법은 trowNewRow의 RowState를 확인하는 것입니다. 그러나 RowState는 변경 내용과 관계없이 "추가됨"상태로 유지됩니다. 행의 값을 수동으로 확인하면 변경 내용이 실제로 기록되었음을 나타냅니다. trowNewRow의 AcceptChanges 프로 시저가 내 코드에서 명시 적으로 호출되지 않았 음을 확인했습니다.
나는 다음과 같은 시도 : 수동으로 콤보 상자 'BindingManagerBase에 EndCurrentEdit 프로 시저를 호출 콤보 상자 3)에 WriteValue을 수행 trowNewRow 의지며 EndEdit 절차 2)를 호출 1.) 4 객체.) 위의 모든 조합
아이디어 나 해결책을 미리 주셔서 감사합니다.
두 개의 긴 단락 대신 관련 코드를 사용하면 문제를 더 잘 보여주고 지루함을 줄일 수 있습니다. rowstate가 추가되면 dataadapter가 데이터베이스를 업데이트하지 않았다는 의미입니다. 그것이 뉴 로우이기 때문에, 당신이 그것을 저장할 때까지 그것은 새로운 행으로 남아 있습니다 (아무리 많은 편집/변경이 있더라도). – Plutonix