2010-04-07 4 views
3

두 개의 DataTable이 있습니다. 먼저 난 단지 두 개의 열을 이름을 원하고 나는 새로운 DataTable에로 (데이터) 그 열을 복사 할 수 있도록 데이터를 주소DataTable간에 다른 열 이름이 있어도 한 DataTable의 열 데이터를 다른 DataTable로 복사하는 방법은 무엇입니까?

DataTable NameAddressPhones = new DataTable(); 

세 개의 기둥을 이름, 주소 및 PHONENO 나누었다이다. 이를 위해

DataTable NameAddress = new DataTable(); 

나는 내가 NameAddressPhones를 (처음) 취소
  foreach (DataRow sourcerow in NameAddressPhones.Rows) 
      { 
       DataRow destRow = NameAddress.NewRow(); 
       foreach (string colname in columns) 
       { 
        destRow[colname] = sourcerow[colname]; 
       } 
       NameAddress.Rows.Add(destRow); 
      } 

을 DataTable을 할 때마다 테이블에 삽입 된 새 레코드가 있습니다. 문제는 두 번째 DataTable에 이미 열 이름 이름과 주소를 가지고있다 부탁해 그리고 때마다 동일한 수의 열이 있지만 열 이름 대신 이름의 NM 같은 다른 일 대신 주소 추가됩니다있을 것 이제 Nm의 열 데이터를 복사하고을 두 번째 DataTable에 추가하려고하지만 열 이름이 두 번째 DataTable의 열 이름과 다릅니다. 그래서 다른 열 이름이있는 경우에도 나는 두 번째 DataTable의 컬럼 의 열 이름에 최초의 DataTable의 NM 열 데이터를 복사 열 두번째의 DataTable의 주소 먼저 DataTable에의 데이터를 추가하고자합니다. 우리는 모두 DataTables 다른 열 이름 NM 같이 있더라도 다른 하나의 DataTable에서 칼럼의 데이터를 복사하는 방법 요컨대

는 제 DataTable에의 열 이름 제의 DataTable 및 이름의 열 이름이다 Nm 열의 데이터는 열로 복사해야합니다.

답변

10

여기에 간단한 방법 :가 사용할 때

foreach (DataRow sourcerow in NameAdressPhones.Rows) 
{ 
    DataRow destRow = NameAdress.NewRow(); 
    destRow["Name"] = sourcerow["Nm"]; 
    destRow["Address"] = sourcerow["Add"]; 
    NameAdress.Rows.Add(destRow); 
} 

자동화 중대하다. 그렇지 않은 경우 원본 열을 대상 열에 매핑해야합니다.

열이 두 테이블에서 같은 순서로있는 경우 일 수 있습니다. 열 이름 대신 서수로 값을 참조 할 수는 있지만 그 코드는 게시하지 않을 것이라는 잘못된 생각입니다.

+0

... Great..I 그냥 내가 열을 매핑 할 수있는 방법 암튼 선생님처럼 생각하지 않은? – Harikrishna

+0

내 코드 샘플을 사용하면지도가됩니다.열의 매핑의 어딘가에 많은리스트를 유지하고 싶다면, 아마도 당신은 스스로를 위해 더 많은 일을하고있을 것입니다. – MusiGenesis

+0

매번 칼럼의 고정 된 순서가 없습니다. 칼럼 Nm과 같이 한 번 색인 번호가 0 일 때 다음 번에 테이블의 위치 2에있을 수 있습니다. 그럼 작동할까요? – Harikrishna

0

질문을 올바르게 이해했다면 일반적으로 저장 프로 시저를 사용하는 것입니다. 두 데이터베이스 모두 동일한 저장 프로 시저를 사용하지만 구현은 각 데이터베이스의 테이블 스키마에 따라 다릅니다. 이렇게하면 필요한 추상화를 수행 할 수 있습니다.

1

를 사용하여 열 인덱스 번호가 아닌 이름 : MusiGenesis, 감사합니다 @

destRow[0] = sourcerow[0]; // for column 0 = "Name" or "NM" 
+0

@SeaDrive,하지만 열의 고정 인덱스가 없습니다. 열 Nm이 위치 0에 있는지 여부. – Harikrishna

+0

당신은 원하는 열, 즉 이름 열에 주소를 넣지 못하도록하는 어떤 방법을 알고 있어야합니다. 그러나 당신은 인덱스 나 문자열 변수를 인덱스로 사용하는 것이 너무 어려워서는 안된다는 것을 알고 있습니다. n1 = "이름"; n2 = "Nm"; // later destRow [n1] = sourceRow [n2]; – SeaDrive

+0

좋은 해결책입니다! – Mage

관련 문제