2010-03-25 1 views
1
SELECT  WO_BreakerRail.ID, indRailType.RailType, indRailType.RailCode, WO_BreakerRail.CreatedPieces, WO_BreakerRail.OutsideSource, WO_BreakerRail.Charged, 
         WO_BreakerRail.Rejected, WO_BreakerRail.RejectedToCrop, COALESCE (WO_BreakerRail.Date, @date) AS Date 
FROM   indRailType LEFT OUTER JOIN 
         WO_BreakerRail ON indRailType.RailCode = WO_BreakerRail.RailCode AND WO_BreakerRail.Date = @date 

테이블 어댑터에 바인딩 된 DataGridView가 있습니다. 이것은 어댑터를 채우는 데 사용하는 선택 쿼리입니다. ID 열은 WO_BreakerRail에서 일치하는 항목이없는 경우 널 (null)이됩니다. 업데이트 명령은 데이터가있는 행을 업데이트 할 때 제대로 작동합니다. 그러나 WO_BreakerRail에 일치하는 정보가없는 행을 업데이트하면 행 집합을 수정했지만 WO_BreakerRail에 해당 행이 없기 때문에 테이블 어댑터가 업데이트해야한다고 생각하기 때문에 실패합니다. ID가 update 명령이 아니라 null 인 경우 insert 명령을 사용하도록 테이블 어댑터에 알리는 방법이 있습니까?C# TableAdapter.Update()가 INSERT 대신 UPDATE를 사용합니다.

+0

추가 조사 후, Row.SetAdded()가 실행 가능한 솔루션 또는 내가 TableAdapter가 어딘가에 누락 체크 박스가 사용하는 다음 ID = null의 각 행을 확인하고 것인가? – Wesley

답변

2

데이터가없는 행의 경우 rowstate를 전화 번호 인 dataRow.SetAdded()으로 new로 설정하십시오.

+0

그걸 시도했지만 InvalidOperationException이 있습니다. SetAdded는 변경되지 않은 DataRowState가있는 DataRow에서 호출 할 수 없습니다. –

+0

올바른 방법인지 확실하지 않지만 dataRow.SetAdded() 전에 dataRow.AcceptChanges()를 호출하여 RowState를 Added로 설정하기 전에 Unchanged로 설정합니다. 이렇게하면 더 이상 InvalidOperationException이 발생하지 않습니다. –

0

다음과 같이 추가 방법에 누락 된 부분이 있다고 생각합니다.

// ... in your method where your inserting 
     DataRow row = MyDataTable.NewRow(); 
     // .... add data to row .... 
     MyDataTable.Rows.Add(row);