asp.net 的TreeView递归加载

来源:互联网 发布:vb编写软件 编辑:程序博客网 时间:2024/05/17 21:59

 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, 
null1);

                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);

                }


            }


        }