2012-08-24 2 views
1

데이터 테이블 (원본)이 있으며이 데이터 테이블의 복사본이 만들어지고 (복사본) 일부 행은 DataGridView에서 수정됩니다.데이터 테이블 선택 메서드로 가져 오는 데이터row 인덱스에 데이터 테이블을 할당하고 해당 데이터 테이블을 업데이트하지 않음

수정이 끝나면 copy datatable의 수정 된 행을 사용하여 원본 datatable을 업데이트하는 것입니다.

DataTable source ;// it is population by database. 

및 복사

DataTable copy = source.Copy(); // Here is the copy datatble. 

있어서 같다 :

public static void UpdateData(DataTable source, DataTable copy) 
{ 
    foreach (DataRow row in copy.Rows) 
    { 
     if (row.RowState == DataRowState.Modified) 
     { 
      var relRow = source.Select("Id = '" + row["Id"] + "'"); 
      if (relRow.Any()) 
      { 
       //relRow[0] = row; //This statement is not udating row in the source dataTable. 
       foreach (var column in copy.Columns) 
       { 
        relRow[0][column.ColumnName] = row[column.ColumnName]; 
       } 
      } 
     } 
     else if (row.RowState == DataRowState.Added) 
     { 
       //Performing some operations to for checking additional values. modiging 'row' with some relative data, and adding to source. 
       source.Rows.Add(row.ItemArray); 
     }  
    } 

    return source; 
} 

relRow[0] = row 같은 데이터 행 어레이의 첫 번째 요소의 행 객체를 할당은 소스 데이터 테이블을 갱신하지 않고, relRow [0]에서 debuggin 동안 수정 된 데이터를 보여줍니다.

데이터 테이블의 변경 내용을 반영하는 열 지정.

그래서 질문입니다. 이유는 relRow[0] = row 원본 데이터 테이블에서 업데이트되지 않습니다.

감사합니다.

답변

1

relRow[0] = row;으로 작성하면 로컬 배열의 0 번째 요소를 수정하여 참조 relRow를 다시 할당하기 만하면됩니다. 실제로 테이블의 행 내용을 변경하지는 않습니다. 귀하의 코드와 동일합니다 :

for(var col = 0; col < source.Columns.Count; i++) 
{ 
    relRow[0][col] = row[col]; 
} 
: 테이블을 수정하려면

DataRow[] localRows; 
// here, localRows will reference items in the source table. 
// Below, you overwrite the reference. 
localRows = source.Select("Id = '" + row["Id"] + "'"); 
if(localRows.Any()) 
{ 
    //changes what reference the 0th element of the localRows array points to, 
    // doesn't change anything about the datatable. 
    // localRows[0] now points to the local variable row (i.e. the item from copy) 
    localRows[0] = row; 
} 

, 당신은 오히려 그 기준보다 relRow의 요소을 수정 뭔가 relRow[0] = row;을 대체 할 수