• 简易文件夹无限级,使用递归重构层级列表



    1
    /// <summary> 2 /// 文件夹实体 3 /// </summary> 4 public class Folder 5 { 6 /// <summary> 7 /// 文件夹ID 8 /// </summary> 9 public int id { get; set; } 10 /// <summary> 11 /// 文件夹名称 12 /// </summary> 13 public string name { get; set; } 14 /// <summary> 15 /// 父级ID 16 /// </summary> 17 public int folder_parent_id { get; set; } 18 }
    
    
     1         /// <summary>
     2         /// 重构文件夹层级列表
     3         /// </summary>
     4         /// <param name="listSource">源数据</param>
     5         /// <param name="pId">父级ID</param>
     6         /// <param name="count">添加元素的次数</param>
     7         /// <param name="levelNum">当前层级</param>
     8         /// <param name="listResult">返回结果集</param>
     9         private void RefactorFolderLevelList(List<Folder> listSource, int pId, int count, List<int> levelNum, List<Folder> listResult)
    10         {
    11             var len_source = listSource.Count();
    12             if (count < len_source)
    13             {
    14                 var tmp_list = listSource.Where(m => m.folder_parent_id == pId);
    15                 var len_tmp_list = tmp_list.Count();
    16                 bool addFlag = true;
    17                 int level = levelNum.Count();
    18                 int i = 0;
    19                 foreach (var item in tmp_list)
    20                 {
    21                     i++;
    22                     item.name = FillString(level, "——") + item.name;
    23                     var model = listResult.Where(m => m.id == item.id).FirstOrDefault();
    24                     if (pId == 0 && model != null)
    25                         continue;
    26                     else
    27                         listResult.Add(item);
    28                     ++count;
    29                     if (listSource.Where(m => m.folder_parent_id == item.id).Count() > 0)
    30                     {
    31                         if (!levelNum.Contains(item.id) && addFlag)
    32                         {
    33                             addFlag = false;
    34                             levelNum.Add(item.id);
    35                         }
    36                         RefactorFolderLevelList(listSource, item.id, count, levelNum, listResult);
    37                     }
    38                     else
    39                     {
    40                         if (i < len_tmp_list)
    41                             continue;
    42                         levelNum = new List<int>();
    43                         RefactorFolderLevelList(listSource, 0, count, levelNum, listResult);
    44                     }
    45                 }
    46             }
    47         }
    48         /// <summary>
    49         /// 字符串填充
    50         /// </summary>
    51         /// <param name="n">填充的次数</param>
    52         /// <param name="str">需要填充的字符串</param>
    53         /// <returns></returns>
    54         private string FillString(int n, string str)
    55         {
    56             StringBuilder ret = new StringBuilder();
    57             for (int i = 0; i < n; i++)
    58             {
    59                 ret.Append(str);
    60             }
    61             return ret.ToString();
    62         }
    效果图:
    
    
    
    
    
    
  • 相关阅读:
    隆重推出PowerDesinger 12.1.0.1913破解补丁
    Glowcode 6.0 破解手记,.Net IL技术
    爬虫如何抓取到Asp.Net中__doPostBack获取新页面的数据
    谁是股市上的最大受益者
    带强名的.net程序反向工程后汇编中的问题总结
    让所有的实体店成为网店的体验店
    推出网站大鱼搜索
    利用搜索引擎技术抢注域名
    在程序中显示PDF文件不依赖于Arcobat Reader的PDF阅读器开发
    用开源Carrot2的后缀树算法做Web文本聚类
  • 原文地址:https://www.cnblogs.com/xcjit/p/4147112.html
Copyright © 2020-2023  润新知