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);
}
}
}
... {
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);
}
}
}