2014-04-09 5 views
4

다른 유형의 열이있는 DataTable이 있습니다. 내가 원하는 것은 DataTable 같은 열 이름을 가지고 있지만 모든 값은 문자열입니다. 이 첫 번째 경우 즉, :C# DataTable을 복사하고 모든 값을 문자열로 변환

이름이 String
Name Age 
----------- 
John 31 
Alice 27 
Marge 45 

곳과 나이가 Int32 열입니다, 내가 원하는 것은 :

Name Age 
----------- 
John 31 
Alice 27 
Marge 45 
이름과 나이가 모두 문자열 있습니다

열. 출력 테이블은 입력 테이블과 동일한 값을 포함해야하지만 모든 값은 문자열로 변환되어야합니다. 누구든지이 일을 어떻게 수행할지에 대한 통찰력을 제공 할 수 있습니까?

foreach (DataColumn col in inputTable.Columns) 
{ 
    outputTable.Columns.Add(col.ColumnName, typeof(string)); 

    foreach (DataRow row in inputTable.Rows) 
    { 
     ...?? 
    } 
} 

또는 아마도 더 효과적인 방법이 있습니까? 모든 지침은 크게 감사하겠습니다.

답변

8

이미 레코드가있는 경우 DataTable에서 열 유형을 수정할 수 없습니다. Clone DataTable을 사용하고 복제 된 테이블의 각 열에서 열 형식을 수정할 수 있습니다. 나중에 행을 가져올 수 있습니다.

DataTable dtClone = dt.Clone(); //just copy structure, no data 
for (int i = 0; i < dtClone.Columns.Count; i++) 
{ 
    if (dtClone.Columns[i].DataType != typeof(string)) 
     dtClone.Columns[i].DataType = typeof(string); 
} 

foreach (DataRow dr in dt.Rows) 
{ 
    dtClone.ImportRow(dr); 
} 

dtClone 당신은 하나의 문자열로 전체 데이터 집합을 변환 할 수 있습니다,이 코드에서 원래 테이블 dt

+0

답변 해 주셔서 감사합니다. 이것은 뒤에서 값의'ToString()'을 호출하는 것과 같은 것입니까? 나는'ImportRow'가 원래의 데이터 타입을 보존한다고 생각했는데,이 경우에는 타입 에러가 발생하지 않을까요? –

+0

@Alex, 아니요, ImportRow는 데이터를 가져 와서 사용 가능한 컨테이너에 맞 춥니 다. 내가 VS에서 위의 코드를 시도하고 작동 – Habib

+0

나는 모든 열이 지금은 문자열 형식이지만 각 'DataColumn'에 대한'MaxLength' 속성은 -1입니다. 문자열 열에 대해 항상> = 0이 아니어야합니까? –

0

toString()이라는 내장 메서드를 사용할 수 있습니다.

foreach (DataColumn col in inputTable.Columns) 
{ 
outputTable.Columns.Add(col.ColumnName, typeof(string)); 

foreach (DataRow row in inputTable.Rows) 
{ 
outputTable.Columns.Add(row.toString()); 
} 
} 
+0

당신은 의미합니까 생략'outputTable.Rows.Add (row.ToString())'대신'의 Columns.Add 수 있습니다 '? –

0

에서 문자열로 모든 열 및 모든 데이터를해야합니다.

string ConvertDatasetToString(DataSet Ds) 
{ 
    string OUT = ""; 
    for (int t = 0; t < Ds.Tables.Count; t++) 
    { 
     for (int r = 0; r < Ds.Tables[t].Rows.Count; r++) 
     { 
      for (int c = 0; c < Ds.Tables[t].Columns.Count; c++) 
      { 
       string s = Ds.Tables[t].Rows[r][c].ToString(); 
       OUT += s; 
      } 
     } 
    } 
    return OUT; 
} 

하나 개의 문자열로 하나의 데이터 테이블을 변환 할 경우, 첫 번째 for