主要是连接数据库,然后用ViewState纪录dataset 对象,然后就开始调用递归动态从数据库中添加节点
/// <summary>
/// 绑定TreeView
/// </summary>
private void BindTreeView()
{
tvDep.Nodes.Clear();
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetStoredProcCommand("B_spDepartmentInfo");
DataSet ds = db.ExecuteDataSet(cmd);
this.ViewState["DataSet_Tree"]=ds;
AddTree(0, (TreeNode)null); //递归调用
}
/// <summary>
/// 递归添加树的节点
/// </summary>
/// <param name="ParentID">父节点的ID</param>
/// <param name="pNode"></param>
public void AddTree(int ParentID, TreeNode pNode)
{
DataSet DataSet_Tree =(DataSet)this.ViewState["DataSet_Tree"];
DataView DataView_Tree = new DataView(DataSet_Tree.Tables[0]);
DataView_Tree.RowFilter = "[ParentDepID]=" + ParentID;
foreach (DataRowView row in DataView_Tree)
{
TreeNode Node = new TreeNode();
if (pNode == null) //添加根节点
{
Node.Text = row["DepName"].ToString()+" (编码:"+row["DepCode"].ToString().Trim()+")";
Node.Value = row["DepID"].ToString();
tvDep.Nodes.Add(Node);
Node.Expanded = true;
AddTree(Int32.Parse(row["DepID"].ToString()), Node); //再次递归
}
else
{
//添加当前节点的子节点
Node.Text = row["DepName"].ToString() + " (编码:" + row["DepCode"].ToString().Trim() + ")";
Node.Value = row["DepID"].ToString();
pNode.ChildNodes.Add(Node);
Node.Expanded = true; //节点状态展开
AddTree(Int32.Parse(row["DepID"].ToString()), Node); //再次递归
}
}
}