背景
在很多情况下,树需要相互引用。引用以后分级码就会存在问题,分级码整理便显得更为重要。
代码
根据树、分级码长度、列名进行整理分级码。
/// <summary>
/// 一键整理树treeList的分级码
/// </summary>
/// <param name="tree">要整理的树</param>
/// <param name="GradeCodesName">分级码列名</param>
/// <param name="GradeCodesLenth">分级码长度</param>
public static void ArrangeGradeCodes( ref TreeList tree,string GradeCodesName,int GradeCodesLenth)
{
if (tree != null)
{
int code = 1;
foreach(TreeListNode node in tree.Nodes)
{
//先给当前列结点分级码赋值。
string gradeCodes = code.ToString().PadLeft(GradeCodesLenth, '0');
node[GradeCodesName] = gradeCodes;
//递归给孩子结点赋值
RecursionArrangeGradeCodes(node.Nodes, GradeCodesName, GradeCodesLenth, gradeCodes);
code++;
}
}
}
递归所有孩子结点,实现分级码更新。
/// <summary>
/// 递归更新整棵树
/// </summary>
/// <param name="nodes">结点集合</param>
/// <param name="GradeCodesName">分级码列名</param>
/// <param name="GradeCodesLenth">分级码长度</param>
/// <param name="parentCodes">父节点的分级码</param>
public static void RecursionArrangeGradeCodes(TreeListNodes nodes, string GradeCodesName, int GradeCodesLenth, string parentCodes)
{
if (nodes.Count < 0) return;
int code = 1;
foreach (TreeListNode node in nodes)
{
string gradeCodes = parentCodes+code.ToString().PadLeft(GradeCodesLenth, '0');
node[GradeCodesName] = gradeCodes;
RecursionArrangeGradeCodes(node.Nodes, GradeCodesName, GradeCodesLenth, gradeCodes);
code++;
}
}
实测有用。
如有疑问,请留言。