• 对数据进行递归排序以树状显示


    源数据:
    id  上级id
    1    0
    2    0
    11   1
    21   1
    111  11

    树状后显示:
    1
    --11
    ---111
    2
    --21

    代码

    #region 自定义方法

        
    #region bind TypeID
        
    private void fn_Bind_ddl_Type()
        {
            DataSet ds;

            BLL.MyTypeInfo bll_Type 
    = new BLL.MyTypeInfo();
            ds 
    = bll_Type.SelectAllTypeForChoose();

            
    this.ddl_Type.Items.Clear();
            
    if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
            {
                DataTable dtPara 
    = ds.Tables[0];
                DataTable dtTree 
    = new DataTable();
                dtTree 
    = dtPara.Clone();
                fn_ChangeToTree(
    ref dtTree, dtPara, 0"0");//从顶级开始递归遍历

                
    this.ddl_Type.DataSource = dtTree;
                
    this.ddl_Type.DataTextField = dtTree.Columns[1].ToString();
                
    this.ddl_Type.DataValueField = dtTree.Columns[0].ToString();
                
    this.ddl_Type.DataBind();
            }
            
    this.ddl_Type.Items.Insert(0new ListItem("""0"));
        }
        
    #endregion

        
    #region 将信息 整理成树状
        
    private void fn_ChangeToTree(ref DataTable dtTree, DataTable dtPara, int intLevel, string strParentTypeID)
        {
            intLevel
    ++;
            
    string strLeftPre = "";
            
    if (intLevel > 1)
            {
                strLeftPre 
    = "|" + strLeftPre.PadLeft(intLevel * 2'-');
            }
            DataTable dt1 
    = new DataTable();//当前级别
            dt1 = dtPara.Clone();
            DataTable dt2 
    = new DataTable();//下一级
            dt2 = dtPara.Clone();

            
    for (int i = 0; i < dtPara.Rows.Count; i++)
            {
                DataRow dr 
    = dtPara.Rows[i];
                
    string strRowParentType = dr["ParentType"].ToString();
                
    if (strRowParentType == strParentTypeID)
                {
                    dt1.Rows.Add(dr.ItemArray);
                }
                
    else
                {
                    dt2.Rows.Add(dr.ItemArray);
                }
            }

            
    for (int j = 0; j < dt1.Rows.Count; j++)
            {
                DataRow dr 
    = dt1.Rows[j];

                dr[
    "TypeName"= strLeftPre + dr["TypeName"].ToString();
                dtTree.Rows.Add(dr.ItemArray);
                
    string strRowParentType = dr["TypeID"].ToString();
                fn_ChangeToTree(
    ref dtTree, dt2, intLevel, strRowParentType);
            }
        }
        
    #endregion

        
    #endregion
  • 相关阅读:
    【转】内部Handler类引起内存泄露
    检测是否存在相机硬件代码
    asp.net 过滤器
    iis 中经典和集成模式对应webconfig节点
    事务
    C# Excel操作
    一步一步部署SSIS包图解教程
    js和.net操作Cookie遇到的问题
    File,FileInfo,Directory,DirectoryInfo
    C#文件Copy
  • 原文地址:https://www.cnblogs.com/freeliver54/p/1947009.html
Copyright © 2020-2023  润新知