2012-01-09 3 views
0

나는이 작업을 수행 할 수 : DataTable의 ADO.NET DataRow를 다른 DataRow로 업데이트하는 방법은 무엇입니까?

public void UpdateDataRowsToDataTable(string tableName, List<DataRow> rows) 
    { 
     foreach (DataRow row in rows) 
     { 
      // this method does not exist!! 
      _dataSet.Tables[tableName].Rows.Update(row); 
     } 
    } 

나는 (아마도 기본 키에 의해) 행을 찾아 업데이트 DataTable에있는 행에 행을 변경하는 방법이 필요합니다.

내가 아는 유일한 가능성은 Select (또는 Find)를 사용하여 모든 열을 반복하고 새로운 값을 부여하는 것입니다. 이것이 사실 일 수 없다고 말해주세요!

답변

3

당신이 한 테이블에서 행의 그룹이 다른에 해당하는 행을 업데이트 할 같은 질문이 소리가 매우 명확하지 않지만 datatable. 이 경우에는 find 메소드를 사용하여 제안 된대로 수동으로 업데이트하거나 다른 행에 다른 행을 추가하고 병합 할 수 있습니다 (두 개의 데이터 테이블을 병합하기위한 모든 종류의 옵션이 있음). 그러나 병합하면 후드에서 동일한 작업을 수행합니다 (기본 키로 찾기 및 열 업데이트).

또 다른 방법은 행을 교체하고 수정 datarow.SetModified()

+0

감사합니다! 나는 전혀 명확하지 않은 질문을 인정한다. 그게 부분적으로 내가하고 싶은 것은 바보 같았 기 때문입니다. 그러나 내 질문에 대답했다. –

1

하거나 이전을 삭제하고 새로운 하나를 추가 할 수 있습니다 ..

+0

두 가지 이유로 해결되지 않을 것입니다. 첫 번째로 : 나는 그것을 찾기위한 기준을 만들어야합니다. 두 번째로 데이터베이스에 다시 쓰일 때 잘못된 행 상태가됩니다. –

+0

새로운 행이 데이터 테이블에 존재하지 않는다면, 당신은 항상 그들을 찾을 수있는 몇 가지 조건을 제공해야합니다 ... 마법은 없습니다 (병합은 기본 키를 기반으로 그들을 찾을 것입니다). 또한 행 상태를 설정하면 'row.SetModified()'를 사용하여 행을 저장 한 후에 문제를 해결할 수 있습니다. –

+0

@mike : thaks. 상태 부분은 괜찮지 만 "병합은 기본 키를 기반으로 병합을 찾습니다"라는 의미는 무엇입니까? 나는 너의 대답에서 지금 이해한다. 그래서 대답 할 필요가 없습니다. –

0

당신은 당신의 datatables가 같은 경우 그렇게하기 위해 권투를 사용할 수 있습니다.

DestDataset.DestDataTable newChildRecords = 
(DestDataset.DestDataTable)_dataset.Tables[tableName].GetChanges(DataRowState.Added); 
0

는 데이터 어댑터를 사용하는 경우 ...

foreach (DataRow row in rows) 
{ 
    Row.BeginEdit();   
    //Do your stuff   
    Row.EndEdit(); 
} 
dataAdapter.Update(_dataSet, "yourTable"); 
0

또 다른 옵션은 DataRow 인스턴스를 업데이트 할 ItemArray 속성을 사용하는 것입니다 그것의 상태를 설정하는 것입니다. 유일한 것은 적절한 행을 선택해야한다는 것입니다. 또한 modification reflected in the DataTable을 갖기 위해서는 요소 대신 전체 ItemArray를 변경해야합니다.

foreach (DataRow row in rows) 
{ 
    // Select the row 
    var rows = _dataSet.Tables[tableName].Select(string.Format("Table_ID = {0}", row["Table_ID"])); 

    // Update the row 
    if (0 < rows.Length) 
     rows[0].ItemArray = (object[])row.ItemArray.Clone(); 
} 

DataRow를 업데이트하는 방식에 관계없이 모든 것을 확장 메서드에 넣을 수 있습니다.

관련 문제