注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

SINOBANJO

IN GOD WE TRUST ! ~ ClueeZhuo

 
 
 
 
 

日志

 
 

无限树状结构逻辑——递归  

2012-05-21 22:33:27|  分类: 班卓C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

无限树状结构逻辑无限树状结构逻辑——递归 - 班卓 - BanjoElena—班卓埃琳娜国际

 

l  应用场景特点

1)列表(Datable

编号

名称

父编号

ID

Name

ParentID

2)仅有一个根节点,每个节点有且只有一个父节点。

典型的递归算法:

?  递归入口:仅有一个根节点(根节点编号)。

?  递归循环体:每个节点有且只有一个父节点,子节点是上级节点的子节点,又是下级节点的父节点。(孙又有子,子又有孙,子子孙孙无穷尽)

?  循环出口:不再有子节点。

子节点编号与父节点编号不能相同,不能交叉。

函数

/// <summary>    

/// 绑定生成一个有树结构的下拉菜单    

/// </summary>    

/// <param name="dtNodeSets"> Datable记录数据所在的表</param>    

/// <param name="strParentColumn"> ParentID表中用于标记父记录的字段</param>    

/// <param name="strRootValue">根节点ID第一层记录的父记录值(通常设计为0或者-1或者Null)用来表示没有父记录</param>    

/// <param name="strIndexColumn">ID索引字段,也就是放在DropDownListValue里面的字段</param>    

/// <param name="strTextColumn">Name显示文本字段,也就是放在DropDownListText里面的字段</param>    

/// <param name="drpBind">需要绑定的DropDownList</param>    

/// <param name="i">用来控制缩入量的值,请输入-1</param>    

private void makeTree(DataTable dtNodeSets, string strParentColumn, string strRootValue, string strIndexColumn,string strTextColumn, DropDownList drpBind, int i)

{

    //每向下一层,多一个缩入单位    

    i++;

    DataView dvNodeSets = new DataView(dtNodeSets);

    dvNodeSets.RowFilter = strParentColumn + "=" + strRootValue;

    string strPading = ""//缩入字符    

    //通过i来控制缩入字符的长度,我这里设定的是一个全角的空格    

    for (int j = 0; j < i; j++)

strPading += " ";//如果要增加缩入的长度,改成两个全角的空格就可以了    

    foreach (DataRowView drv in dvNodeSets)

    {

ListItem li = new ListItem(strPading + "" + drv[strTextColumn].ToString(), drv[strIndexColumn].ToString());

drpBind.Items.Add(li);

makeTree(dtNodeSets, strParentColumn, drv[strIndexColumn].ToString(), strIndexColumn, strTextColumn, drpBind, i);

    }

    //递归结束,要回到上一层,所以缩入量减少一个单位    

    i--;

}

调用方法:

   string sql = "Select JGDM,JGMC,SJJG from [C_SUBCOMPANY]  order by JGDM ";

   System.Data.DataTable dt = SFS.Data.SqlServer.GetSingleData.GetOnlyOneDataTable(sql);

makeTree(dt, "SJJG""000000""JGDM""JGMC", drp, -1);

  评论这张
 
阅读(107)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017