改自這位兄臺的一段程式碼
https://www.cnblogs.com/xiayang/archive/2010/07/19/1780566.html
1 /// <summary> 2 /// 生成一個樹形的表樣, 3 /// </summary> 4 /// <param name="dtNodeSets">選單記錄資料所在的表</param> 5 /// <param name="parentColName">表中用於標記父記錄的欄位</param> 6 /// <param name="rootValue">篩選的根值</param> 7 /// <param name="indexColumn">索引列</param> 8 /// <param name="textColName">文字列</param> 9 /// <param name="i"></param> 10 /// <param name="outDt"></param> 11 protected void MakeTree(DataTable dtNodeSets, string parentColName, string rootValue, string indexColumn, string textColName, int i, ref DataTable outDt) 12 { 13 //每向下一層,多一個縮入單位 14 if (outDt == null || outDt.Columns.Count == 0) 15 { 16 outDt = dtNodeSets.Clone(); 17 } 18 i++; 19 List<DataRow> drs = dtNodeSets.Select(parentColName + "=" + rootValue).ToList(); 20 string strPading = ""; //縮入字元 21 //透過i來控制縮入字元的長度,我這裡設定的是一個全形的空格 22 for (int j = 0; j < i; j++) 23 strPading += " "; //如果要增加縮入的長度,改成兩個全形的空格就可以了 24 foreach (DataRow dr in drs) 25 { 26 dr[textColName] = strPading + "└─ " + dr[textColName].ToString(); 27 outDt.ImportRow(dr); 28 MakeTree(dtNodeSets, parentColName, dr[indexColumn].ToString(), indexColumn, textColName, i, ref outDt); 29 } 30 //遞迴結束,要回到上一層,所以縮入量減少一個單位 31 i--; 32 }
最後的繫結後的效果如下: