/// <summary>
/// 初始化显示树型菜单
/// </summary>
private void showTreeviewMenu()
{
string str = "select * from menu order by level_code";
tempTypeDao = new TemplateTypeDAO();
dtNode = tempTypeDao.Select(str);
DataRow[] drs = dtNode.Select(" pid is null");
foreach (DataRow dr in drs)
{
//这是在找数据库中的节点
TreeNode node = new TreeNode();
node.Text = dr["name"].ToString();
node.Tag = dr["ID"].ToString();
this.treeView1.Nodes.Add(node);//把指定节点添加到控件中
bindtree(node.Tag.ToString(),node);
}
}
/// <summary>
/// 查找根节点(parent_ID为0的节点)的子节点
/// </summary>
/// <param name="parent_ID">参数,接收根节点ID</param>
private void Bindtree(string parent_ID,TreeNode rootnode)
{
DataRow[] drs = Getdata(parent_ID);
if (drs.Length > 0)
{
for (int i = 0; i < drs.Length; i++)
{
//这是在找数据库中的节点
TreeNode node = new TreeNode();
node.Text = drs[i]["name"].ToString();
node.Tag = drs[i]["ID"].ToString();
rootnode.Nodes.Add(node);//把指定节点添加到控件中
Bindnode(node);
}
}
}
/// <summary>
/// 递归遍历指定节点下的子节点
/// </summary>
/// <param name="nd">参数,接收节点对象</param>
private void Bindnode(TreeNode nd)
{
DataRow[] ds = Getdata(nd.Tag.ToString());
for (int i = 0; i < ds.Length; i++)
{
TreeNode node = new TreeNode();
node.Text = ds[i]["name"].ToString();
node.Tag = ds[i]["ID"].ToString();
nd.Nodes.Add(node);//把指定节点添加到控件中
Bindnode(node);
}
}
/// <summary>
/// 从数据库中查找指定节点(ID)的子节点
/// </summary>
/// <param name="ID">参数,接收父节点ID</param>
/// <returns>返回DataSet</returns>
private DataRow[] Getdata(string pID) //在这里我们传入一个parent_ID
{
DataRow[] dt = dtNode.Select(" pid='" + pID + "'") ;
return dt; //返回含有ID的数据
}
最后在,form的load事件中,加上方法调用函数
showTreeviewMenu();
最终效果如图: