[C#] DataTable行列轉置

將DataTable行列轉置 
using System.Data;

public DataTable RevertRowToColumn(DataTable dtSource)
{
    DataTable newDataTale = new DataTable();
    //原本DataTable列數
    int dtRowsCount = dtSource.Rows.Count;
    //原本DataTable欄數
    int dtColumnCount = dtSource.Columns.Count;
	//將原本DataTable的第一個欄位放入轉置後的第一欄
    newDataTale.Columns.Add(dtSource.Columns[0].ToString(), typeof(string));
    
    //將原本DataTable的第一列轉置為轉置後的欄位
    for (int i = 0; i < dtRowsCount; i++)
    {
        newDataTale.Columns.Add(dtSource.Rows[i][0].ToString(), typeof(string));
    }

    //將原本DataTable的欄位列依序轉置為轉置後的每一列
    //起始為1,因為原本第一列已經放置為欄位名稱,要從第二列開始跑起
    for (int s = 1; s < dtColumnCount; s++)
    {
        DataRow dr = newDataTale.NewRow();
        dr[0] = dtSource.Columns[s].ToString();
        for (int i = 0; i < dtRowsCount; i++)
        {
            dr[i + 1] = dtSource.Rows[i][s].ToString();
        }
        newDataTale.Rows.Add(dr);
    }
    newDataTale.TableName = "NEW_" + dtSource.TableName;//命名DataTable名稱
    return newDataTale;
}

留言

熱門文章

[Web] Mac 安裝 Telnet

[Windows] 排程輸出、輸入指令

[C#] Stream.CopyTo 方法使用