2011-08-01 4 views
0

データテーブルのデータの向きを変更する必要があるという要件があります。私がデータを縦に広げたとします:c#/ .netでデータセットのデータの向きを垂直から水平に変更する方法3.5

Year | 0-20 | 21-40 | 41-60 | >61 | Total 
% total | 11.5 | 26.5 | 42.0 | 20.0 | 100.0 

I want a method to change the orientation to horizontal like: 
Year | % Total 
0-20 | 11.5 
21-40 | 26.5 
41-60 | 42.0 
>61 | 20.0 
Total | 100.0 

私はC#と.net 3.5を使用しています。私は本当に元のデータセットを変更することはできません。私はそれを処理するために私のコードで何かをしなければならない。この変換されたデータセットは、さらに処理するために既存の関数に供給されます。どんな助けもありがとう。

+0

おかげキャンベルとノーマン、両方の溶液は、適切な列ヘッダー名を追加しません。ヘッダーはデータの一部として含まれています。私はそれを使用可能にするためにコードを微調整しようとします。 –

答えて

0

DataTableをピボットするように聞こえます。

それぞれの列を取得して行にするのに役立つ方法は次のとおりです。ニーズに応じて詳細を細かく設定することは、お客様の責任です。

private DataTable PivotTable(DataTable origTable) 
{ 

    DataTable newTable = new DataTable(); 
    DataRow dr = null; 

    //Add Columns to new Table 
    for (int i = 0; i <= origTable.Rows.Count; i++) 
    { 
     newTable.Columns.Add(new DataColumn(origTable.Columns[i].ColumnName, typeof(String))); 
    } 

    //Execute the Pivot Method 
    for (int cols = 0; cols < origTable.Columns.Count; cols++) 
    { 
     dr = newTable.NewRow(); 
     for (int rows = 0; rows < origTable.Rows.Count; rows++) 
     { 
      if (rows < origTable.Columns.Count) 
      { 
       dr[0] = origTable.Columns[cols].ColumnName; // Add the Column Name in the first Column 
       dr[rows + 1] = origTable.Rows[rows][cols]; 
      } 
     } 
     newTable.Rows.Add(dr); //add the DataRow to the new Table rows collection 
    } 
    return newTable; 
} 
1

Taken from here

public DataSet FlipDataSet(DataSet my_DataSet) 
    { 
     DataSet ds = new DataSet(); 
     foreach (DataTable dt in my_DataSet.Tables) 
     { 
      DataTable table = new DataTable(); 
      for (int i = 0; i <= dt.Rows.Count; i++) 
      { 
       table.Columns.Add(Convert.ToString(i)); 
      } 
      DataRow r = null; 
      for (int k = 0; k < dt.Columns.Count; k++) 
      { 
       r = table.NewRow(); 
       r[0] = dt.Columns[k].ToString(); 
       for (int j = 1; j <= dt.Rows.Count; j++)  
        r[j] = dt.Rows[j - 1][k]; 
       table.Rows.Add(r); 
      } 
      ds.Tables.Add(table); 
     } 
     return ds; 
    } 
関連する問題