2017年7月24日 星期一

DataTable 的資料呈現,由直向轉橫向呈現


將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 &gt;= 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 由直向轉為橫向呈現,也歡迎各位用力鞭打。

但目前還沒有知道更好的方法之前,可能先暫時以這種方式進行囉!!


沒有留言:

張貼留言