樹開下拉選單資料來源生成

猫狼發表於2024-06-08

改自這位兄臺的一段程式碼

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     }

最後的繫結後的效果如下:

相關文章