2011-02-09 3 views
0

DataRowCollection.Add (DataRow 행)가 새 행을 해당 데이터 테이블에 삽입하는 위치를 파악하려고합니다. 그것은 테이블의 끝 부분에 있습니까? 그것은 무작위인가?DataRowCollection.Add 메서드는 어디에서 새 행을 삽입합니까?

또한 데이터 테이블을 반복하는 동안 이것을 사용하고 싶습니다. 어떤 조건이 존재하는 경우 다른 데이터를 포함하는 새 행을 추가하여 For 루프를 통해 데이터 테이블의 끝까지 실행하십시오. 이 접근법에 특정 문제가 있습니까? 내가 어떻게 다룰 수 있겠 니?

EDIT : 메모리에 저장된 .Net DataTABLE을 통해 루핑 할 때입니다. 이 루핑 작업 중에 원래 데이터가 저장된 dataBASE를 만지지는 않을 것입니다. DataTABLE은 루프 전에 채워 지므로 문제가되지 않습니다.

DataTable machineANDlastDate = new DataTable(); 
//Populate machineANDlastDate 

for (int i = 0; i < machineANDlastDate.Rows.Count; i++) 
{ 
    lastFutureDate = DateTime.Parse(machineANDlastDate.Rows[i]["MaxDueDate"].ToString()); 
    newDateTime = lastFutureDate.AddDays(frequency); //This is where the new date is created. 
    machineSerial = machineANDlastDate.Rows[i]["machineSerial"].ToString(); 

    if (newDateTime < DateTime.Now) 
    { 
      machineANDlastDate.Rows.Add(new String[] { machineSerial,   newDateTime.AddDays(frequency).ToString() }); 

      continue; 
    } 
    ...Removed for irrelevancy... 
} 

이이 데이터 테이블의 마지막에 행을 추가 할 수있는 유효한 방법입니다 여기에

는 relavant 코드?

+1

해시가 아니라면 추가가 끝납니다. – Alex

+0

해시가 아닌 한? – MAW74656

+0

키/값이있는 곳에서 해시가 더 일반적이라고 생각합니다. 키는 해시되어 값 조회가 빠릅니다. – jlafay

답변

2

내가 아는 한, 그것은 항상 컬렉션의 끝에 추가됩니다.

for 데이터베이스를 통해 반복하는 경우 데이터 테이블의 시작 부분에서 시작하여 끝나면 끝나면 비슷한 문제가 발생하지 않습니다. 그러나 새로 작성된 데이터 행을 반복하여 처리 할 것인지 여부를 알 수 없습니다. 기본 컬렉션의 수정을 처리 할 수 ​​없기 때문에 foreach 루프를 대신 사용하면 문제가 발생할 수 있습니다.

+0

네, 새로운 아이템을 반복하고 싶습니다. 특정 조건이 존재하면 해당 데이터를 수정 한 다음 루프를 통해 수정 된 버전을 실행하려고합니다. 기본 연결에 foreach 루프 문제가 있다는 것을 알고 있으므로 For 루프에이 문제가 없다고 말하면됩니까? – MAW74656

+0

항목을 제거하지 않으면 조건이 아직 유효하다면 어떤 문제도 상상할 수 없습니다. 'for'와'foreach'의 두 루프 사이의 중요한 차이점은'for' 루프의 인덱싱에 있습니다. 인덱스를 가지고 작업하기 때문에,'foreach' 루프로 인한 문제를 피할 수 있습니다. 희망이 도움이됩니다. –

+0

DataTable의 Rows.Count 메서드를 제한으로 사용하는 것은 어떻습니까? 루프 반복마다 업데이트됩니까? – MAW74656

0

대부분의 데이터베이스베이스 커넥터를 알고있는 한 언제나 테이블 끝 부분에 있습니다. 추가 행을 사용하는 경우에는 항상 끝에 있습니다.

+0

여기 데이터베이스 커넥터로 작업하지 않습니다. – MAW74656

-3

Add 메서드는 DataRowDataRowCollection 개체에만 삽입합니다. 실제로 DataRow을 데이터 테이블에 추가하려면 DataTable에 자신을 추가하는 NewRow 메서드를 호출해야하며 해당 데이터베이스의 테이블에 행을 추가해야합니다. 참고로 체크 아웃 http://msdn.microsoft.com/en-us/library/9yfsd47w.aspx

+0

아니요, 정확히 다른 방향입니다. 먼저'NewRow' 메쏘드로 새로운 행을 만들어야하고 이후에는'Add' 메쏘드로 데이터 테이블에 그것을 추가해야합니다. DataTable은 DataRowCollection에서 일종의 표현입니다. –

+0

DataTable에는 DataRowCollection (DataTable에는 DataRowCollection이 있습니다)이 있습니다. 관련이 없거나 링크 된 DataTable은 DataRowCollection을 비롯한 많은 다른 개체의 구성입니다. – MAW74656

+0

NewRow 메서드는 테이블과 동일한 열 구조를 가진 행 인스턴스를 반환합니다. 이렇게하면 인덱서를 사용하여 열별로 셀을 참조 할 수 있습니다. 데이터가 채워진 후에도 행을 테이블에 추가해야합니다. –

1

행이 새로운 지 여부를 알고 싶으면 DataRow.RowState 속성을 확인할 수 있습니다.

// your code to add rows 
... 

// process added rows 
foreach (DataRow row in machineANDlastDate.Rows) 
{ 
    if (row.RowState == DataRowState.Added) 
    { 
     // do stuff 
    } 
} 

// now confirm new rows (they won't have a RowState of Added after this) 
machineANDlastDate.AcceptChanges(); 
+0

이 AcceptChanges() 메서드에 익숙하지 않지만 행의 출처 및 위치와 관련이 없습니다. 루프가 도착할 때 처리하려고합니다. – MAW74656

+0

AcceptChanges는 모든 행의 RowState를 수정되지 않음으로 변경합니다. 행을 추가 할 때 추가 된 RowState로 시작합니다.이 행을 사용하여 새 행만 처리 할 수 ​​있습니다. 재 처리가 필요하고 동일한 행을 다시 처리하지 않으려는 경우에만 완료되면 AcceptChanges를 호출하면됩니다. –

관련 문제