의이 사실은 다음과 같습니다부모 DataGridView를 업데이트하지 않습니다
- 나는 부모 테이블이,의 주문 호출 할 수 있습니다. 이 테이블의 데이터는 DataGridView (dgvOrder)를 사용하여 볼 수 있습니다.
- 나는 자식 테이블을 가지고 있는데, OrderDetails라고 부르 자. 이 테이블의 데이터는 DataGridView (dgvOrderDetails)를 사용하여 볼 수 있습니다.
- BindingSource를 사용하여 Order 테이블에 데이터 바인딩 된 텍스트 상자 (확인란, 콤보 상자 등)가 있습니다.
- 나는 비주얼 스튜디오를 사용하고 내가 원하는 무엇 2008 년
:
dgvOrder는 읽기 전용입니다. BindingNavigator와 같은 레코드를 탐색 할 때 사용합니다. (직관적이기 때문에 레코드를 탐색하기 위해 DataGridView를 사용하고 다음 몇 레코드가 무엇인지 바로 알 수 있습니다.)
새 레코드를 추가하려면 "새"단추 (uxNewButton)를 사용합니다. 업데이트를 저장하려면 "저장"버튼 (uxSaveButton)을 사용합니다. 레코드는 텍스트 상자를 사용하여 추가되며 dgvOrder를 통해 직접 추가되지는 않습니다. 하위 레코드는 dgvOrderDetails를 통해 직접 추가됩니다.
dgvOrderDetails는 꽤 분명합니다. Order (1 대 다수 관계)에 대한 세부 정보가 포함되어 있습니다.
코드 및 구성 내 (데이터 집합 디자이너)
- Hierchical 업데이트는 주문 및 OrderDetail 사이
- 관계가 "둘의 관계로 설정되어 (2008 VS에서 기본적으로) true로 설정되어 및 fk 제약 ". 업데이트 및 삭제는 계단식으로 설정됩니다. 수락/거부 규칙이 "없음"으로 설정되었습니다. 중첩 된 관계가 선택 취소되었습니다.
TableAdapterManager는 디자이너 (tam)로 드래그됩니다.
개인 무효 uxNewButton_Click (객체 송신자있는 EventArgs E) {
bsOrder.AddNew();
}
개인 무효 uxSaveButton_Click (객체 발신자, E는 EventArgs) {
this.Validate(); bsOrder.EndEdit(); bsOrderDetails.EndEdit(); tam.UpdateAll(dsOrder); //DataSet is named dsOrder. try-catch block excluded for simplicity
}
문제 :이 오류가 발생합니다 저장 버튼을 타격, 모든 텍스트 상자 (등)과 dgvOrderDetails를 작성 후
는 : ForeignKeyConsraint FK_Orderchild_Order는 부모 테이블에 존재하는 하위 키 값 (-1)가 필요합니다 .
그러나 dgvOrder (dgvOrderDetails)를 사용하여 직접 레코드를 추가하면 저장 버튼을 누르면 성공적으로 저장됩니다.
텍스트 상자를 사용하여 새 레코드를 추가했지만 dgvOrder에서 다른 행을 선택한 다음 dgvOrderDetails에서 레코드를 추가하기 전에 현재 행을 다시 선택해야만 성공적으로 저장할 수 있다는 것을 알게되었습니다.
텍스트 상자를 통해 새 레코드를 추가하는 동안 기본 데이터가 DataGridView와 동기화되지 않는 것처럼 보입니다. 다른 행을 선택한 다음 현재 행을 선택하면 데이터가 모두 동기화됩니다.
내가 좋아하는 저장 이벤트에 다양한 해킹을 시도 :에
dgvOrder.Refresh(); //or
dgvOrder.Invalidate();
dgvOrder.Refresh(); // or
dgvOrder.Parent = null;
Controls.Add(dgvOrder);
//and so on and so forth (suggetstions from Google searches)
tam.UpdateAll()을 호출하기 전에 프로그래밍 방식으로 dgvOrder 선택 항목을 이동한다고해서 문제가 해결되지 않는다는 점을 잊어 버렸습니다. – tonex
bsOrder.EndEdit()를 dgvOrderDetail의 Enter Event에 추가하면 문제를 해결하는 것으로 보이지만 이것이 최선의 방법인지 확실하지 않습니다. – tonex