UnitData 为类型化数据集,字段包括UnitCode,UnitName
其中UnitCode的规则为每两位递增。
00
0001
000101
0002
000201
000202
01
依此类推。
tvnUnit为TreeView控件
protected void Page_Load(object sender, EventArgs e)

...{
if (!Page.IsPostBack)

...{

UnitData uData = uRules.GetUnitData(string.Empty);

LoadNodes(uData, null, 1);

tvUnit.CollapseAll();

}

}


private void LoadNodes(UnitData uData, TreeNodeCollection parentNodes, int times)

...{

TreeNode nodeStart;

if (parentNodes == null)

...{
nodeStart = new TreeNode("从这里开始", string.Empty);

tvUnit.Nodes.Add(nodeStart);

parentNodes = new TreeNodeCollection();

parentNodes.Add(nodeStart);

tvUnit.Nodes.Add(nodeStart);

LoadNodes(uData, parentNodes, times);

}
else

...{
bool hasChildren = false;
TreeNodeCollection tmpNodes = new TreeNodeCollection();
foreach (TreeNode node in parentNodes)

...{

UnitData.UnitRow[] rows;

rows = (UnitData.UnitRow[])uData.Unit.Select("LEN(unitcode)=" + unitCodeIndent * times + " AND unitcode LIKE '" + node.Value + "%'", "unitcode");

string valuePath = GetValuePath(node);

foreach (UnitData.UnitRow row in rows)

...{
hasChildren = true;
tvUnit.FindNode(valuePath).ChildNodes.Add(new TreeNode(row.UnitName, row.UnitCode));
tmpNodes.Add(new TreeNode(row.UnitName, row.UnitCode));
}

}
parentNodes = tmpNodes;
if (hasChildren)

...{

LoadNodes(uData, parentNodes, ++times);

}

}

}