使用递归加载无层次限制的TreeView控件的节点

来源:互联网 发布:如何做好网络招聘 编辑:程序博客网 时间:2024/05/20 06:25

遞歸方法: 

#region 加載樹節點
/// <summary>
/// 加載樹節點。樹的基本思路是:從指定的父節點開始遞歸調用顯示子樹(可以對DataTable.DefaultView.RowFilter設置過濾條件)
/// </summary>
/// <param name="treeNodeCollection">要加載TreeNode對象的TreeNode.Nodes的集合</param>
/// <param name="dt">DataTable 對象</param>
/// <param name="nodeIdField">保存節點ID列的字段名稱</param>
/// <param name="parentIdField">保存父節點ID列的字段名稱(只允許字符和數字類型)</param>
/// <param name="nodeNameField">保存節點名稱列的字段名稱</param>
/// <param name="nodeImageIndexField">保存節點圖片索引列的字段名稱</param>
/// <param name="nodeSelectedImageIndexField">保存選擇節點圖片索引列的字段名稱</param>
/// <param name="parentNodeTag">父節點標記</param>
public void LoadTreeNode(TreeNodeCollection treeNodeCollection,DataTable dt,string nodeIdField,string parentIdField,string nodeNameField,string nodeImageIndexField,string nodeSelectedImageIndexField,string parentNodeTag)
{    
    
try
    {
        
if(dt.Rows.Count<=0return;
        TreeNode tmpNode;
        
int imageIndex=-1;
        
string oldFilter=dt.DefaultView.RowFilter;
        DataView dv
=new DataView(dt);
        dv.Sort
=dt.DefaultView.Sort;
        
if(dv[0][parentIdField].GetType()==typeof(System.String))
            dv.RowFilter
=parentIdField+"='"+parentNodeTag+"'";
        
else
            dv.RowFilter
=parentIdField+"="+parentNodeTag;
        
if(oldFilter!=string.Empty)
            dv.RowFilter
=dv.RowFilter+" and "+oldFilter;
        
foreach(DataRowView drv in dv)                
        {    
            tmpNode
=new TreeNode();
            tmpNode.Text
=drv[nodeNameField].ToString();//+drv[nodeIdField].ToString().Trim();            
            tmpNode.Tag=drv[nodeIdField];                    
            
if(drv[nodeSelectedImageIndexField]!=System.DBNull.Value)
            {
                imageIndex
=Convert.ToInt32(drv[nodeSelectedImageIndexField]);
                
if(imageIndex>=0)
                {
                    tmpNode.ImageIndex
=imageIndex;
                    tmpNode.SelectedImageIndex
=imageIndex;
                }
            }
            
if(drv[nodeImageIndexField]!=System.DBNull.Value)
            {
                imageIndex
=Convert.ToInt32(drv[nodeImageIndexField]);
                
if(imageIndex>=0)
                {
                    tmpNode.ImageIndex
=imageIndex;
                }
            }
            
string father=drv[nodeIdField].ToString();
            treeNodeCollection.Add(tmpNode);                        
            LoadTreeNode(tmpNode.Nodes,dt,nodeIdField,parentIdField,nodeNameField,nodeImageIndexField,nodeSelectedImageIndexField,father);                
        }
    }
    
catch(Exception te)
    {
        MessageBox.Show(te.Message,
"Error",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    }
}
#endregion

調用方法:

LoadTreeNode(this.treeView1.Nodes,ds.Tables[dataMember],"NodeId","ParentId","NodeName","NodeImageIndex","NodeSelectedImageIndex",rootTag);

原创粉丝点击