2009-09-02 6 views
0

요약 : 여러 DataRelations를 통해 연결된 여러 DataTable이 포함 된 DataSet이 있습니다. 이 DataSet에 대한 데이터 바인딩을 사용하여 양식을 만들었으며 매우 복잡하다고 말할 수 있습니다.Databinding, datarelations가있는 데이터 세트 및 DB의 새로 고침 된 단일 DataTable

시나리오는 다음과 같습니다. 양식의 주된 목적은 새 레코드를 삽입하는 것입니다. 그것을 삽입하기 위해서는 다양한 부모 - 자식 관계를 설정해야합니다. 그것은 모두 데이터 바인딩과 함께 잘 작동하지만 문제는 다음에 있습니다 : 사용자가 부모 - 자식 관계 중 하나에 대해 새로운 "자식"을 입력하려고 할 때 새로운 양식이 열리고 yada yada yada가 입력됩니다. 공장. 문제는 - 부모 - 자식 콤보 상자에 표시하려면 원래 데이터 형식으로 새 데이터를 다시 가져와야합니다.

내가 아는 한 가지 방법은 전체 양식을 새로 고치는 것입니다. 하지만 그 데이터가 포함 된 DataTable을 새로 고치는 솔루션을 찾고 있습니다. 나는 DB에서 신선한 데이터를 새로운 DataTable을 점점하고 데이터 세트에서 DataTable을 함께 병합 시도했지만 작동하지 않습니다 : 예외가 발생한다 "자식 행이 여러 부모가"등가

// basically just a Select * using dataadapter, 
// nothing programmatically added 
DataTable table = tableModule.GetPlainTable(); 
existingDataSet.Tables["tableName"].Merge(table); 

예를 들어 제가하려는 것은 Customer 콤보 박스가있는 Order 양식을 갖는 것입니다. 콤보 상자의 오른쪽에는 새로운 "고객 추가"양식을 여는 "추가"버튼이 있습니다. DB (Customers) 테이블은 "Cities"테이블과 관련이 있고 그 데이터는 Orders 폼의 databindning과 연결되어 있습니다.

EDIT : 내가 생각할 수있는 한 가지 해결책은 새 DataTable에서 "수동으로"반복하고 DataSet 내부의 원래 DataTable에없는 모든 행을 찾는 것입니다. 그러나이 중 하나라도 작동하는지 확신 할 수 없습니다 ...

/제안/설명/올바른 방향으로 밀어 크게 인정 될 것입니다 :)

답변

0

글쎄, 내가 두 번째 양식에 삽입시 수동 행 복사 문제를 해결 ... 나는 개체 컬렉션 (행 항목 배열), 먼저 형태로 내가 수동을 통해 새 행을 추가하는 해당 이벤트에 대한 핸들러 등록 : 그 행에 대해 AcceptChanges()를 호출 후

data.Tables["tableName"].Rows.Add(e.RowItems); 

오히려 추가보다 상태가 변경되지 않은 만드는을 ...

이 솔루션은 빠르며 더러울지라도 작동합니다. 문제는, 더 나은 "데이터 바인딩"철학이 있다고 생각합니다. : =)