將DataTable 由直轉橫向
稍早,因特殊需求的關係,User 有提到希望能以橫式的方式來顯示從資料庫取得的資料。
所以實作了將DataTable 內的資料由直向轉為橫向顯示的方法,
目前已交付使用,且運作一段不短時間後仍舊正常,
所以寫下此篇文章作為紀錄 (以下將利用模擬資料進行)。
Ex :
圖、1 直向的資料
#region 準備範例資料
//建立DataTable
DataTable dt = new DataTable();
//新增2欄位
dt.Columns.Add("Name");
dt.Columns.Add("TEL");
//寫入直向的10筆資料
for (int i = 1; i < 11; i++)
{
DataRow dr = dt.NewRow();
dr[0] = "A" + i;
dr[1] = "B" + i;
dt.Rows.Add(dr);
}
#endregion
開始進行轉換
先準備好新的DataTable, 並產生Columns
//建立新的DataTablle
DataTable dtNew = new DataTable();
for (int i = 1; i < 4; i++)
{
dtNew.Columns.Add("Name" + i);
dtNew.Columns.Add("TEL" + i);
}
圖、2 新的橫向DataTable
開始將直向的資料(舊的) 放進新的DataTable
#region 開始準備進行轉為橫向
//dtNew 的新DataRow
DataRow drNew = dtNew.NewRow();
int iLast = 1; //用來記錄跑到第幾個舊資料列
//用來說明寫入的是新資料列的第幾個Cell
int iCellCount = 0;
//開始by 每一個舊資料的Rows 寫入新的DataTable
foreach (DataRow item in dt.Rows)
{
//寫入每個Rows的特定Column內
drNew[iCellCount] = item["Name"].ToString();
drNew[iCellCount + 1] = item["TEL"].ToString();
iCellCount = iCellCount + 2; //用來計算第幾個Column
//如果裝滿了一個Row,就在dtNew中新增新的Row
if (iCellCount >= 6)
{
iCellCount = 0;
dtNew.Rows.Add(drNew);
drNew = dtNew.NewRow();
}
//如果是最後一筆資料,直接新增進dtNew
else if (iLast == item.Table.Rows.Count)
{
dtNew.Rows.Add(drNew);
}
//紀錄 +1
iLast += 1;
}
#endregion
圖、3 完成後的資料
我相信一定會有更好的方法可以將DataTable 由直向轉為橫向呈現,也歡迎各位用力鞭打。
但目前還沒有知道更好的方法之前,可能先暫時以這種方式進行囉!!
沒有留言:
張貼留言