2012-01-20 6 views
2
여기

의이 사실은 다음과 같습니다부모 DataGridView를 업데이트하지 않습니다

  1. 나는 부모 테이블이,의 주문 호출 할 수 있습니다. 이 테이블의 데이터는 DataGridView (dgvOrder)를 사용하여 볼 수 있습니다.
  2. 나는 자식 테이블을 가지고 있는데, OrderDetails라고 부르 자. 이 테이블의 데이터는 DataGridView (dgvOrderDetails)를 사용하여 볼 수 있습니다.
  3. BindingSource를 사용하여 Order 테이블에 데이터 바인딩 된 텍스트 상자 (확인란, 콤보 상자 등)가 있습니다.
  4. 나는 비주얼 스튜디오를 사용하고 내가 원하는 무엇 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) 
+0

tam.UpdateAll()을 호출하기 전에 프로그래밍 방식으로 dgvOrder 선택 항목을 이동한다고해서 문제가 해결되지 않는다는 점을 잊어 버렸습니다. – tonex

+0

bsOrder.EndEdit()를 dgvOrderDetail의 Enter Event에 추가하면 문제를 해결하는 것으로 보이지만 이것이 최선의 방법인지 확실하지 않습니다. – tonex

답변

0

추가 bsOrder.EndEdit()는이 모범 사례 인 경우 dgvOrderDetail의 이벤트는 문제를 해결하기 위해 보이지만 잘 모르겠어요 입력 .

관련 문제