我要实现一个树形菜单,从数据库里导出的数据,现在数据库结构设计成这样了
id(子类菜单编号) parentid(父类菜单编号) listname(菜单显示的内容)
1 0 中国 //这里是根节点,
2 1 北京 //1作为第二级菜单的根节点,他的子结点号是2
3 1 河北 //同样1为第二级菜单,子结点号为3
4 2 朝阳区 //2作为第三极菜单的根节点,4作为三级的子结点
5 3 河北省廊坊市 //3作为第三极菜单的根节点,5作为三级的子结点
.....依次这样安排数据库结构
然后从根节点中国开始,查询出根节点的parentid和它的子结点id,然后在根据id进行查询,当它是parentid的时候在查它的子菜单,依次使用递归运算,结果能够把所有的子类都显示出来,可是同级别的菜单就不能显示出来了,比如说北京和河北是同级的,就只能把北京的子类显示出来,河北就不能显示了,所以想请教一下,谁能知道怎么做,最好是有同样数据库结构的代码,先谢过了。
id(子类菜单编号) parentid(父类菜单编号) listname(菜单显示的内容)
1 0 中国 //这里是根节点,
2 1 北京 //1作为第二级菜单的根节点,他的子结点号是2
3 1 河北 //同样1为第二级菜单,子结点号为3
4 2 朝阳区 //2作为第三极菜单的根节点,4作为三级的子结点
5 3 河北省廊坊市 //3作为第三极菜单的根节点,5作为三级的子结点
.....依次这样安排数据库结构
然后从根节点中国开始,查询出根节点的parentid和它的子结点id,然后在根据id进行查询,当它是parentid的时候在查它的子菜单,依次使用递归运算,结果能够把所有的子类都显示出来,可是同级别的菜单就不能显示出来了,比如说北京和河北是同级的,就只能把北京的子类显示出来,河北就不能显示了,所以想请教一下,谁能知道怎么做,最好是有同样数据库结构的代码,先谢过了。
{
DataView dvList = new DataView(this.objDataTable);
dvList.RowFilter = "parentid='" + parent_id + "'"; //过滤父节点
TreeNode nodeTemp;
foreach (DataRowView dv in dvList)
{
nodeTemp = new TreeNode();
nodeTemp.Value = dv["iD"].ToString(); //节点ID
nodeTemp.Text = dv["listname"].ToString(); //节点名称 node.Add(nodeTemp); //加入节点
nodeTemp.Expanded = false;
CreateTree(nodeTemp.ChildNodes, nodeTemp.Value.ToString()); //递归
}
}
调用
private DataTable objDataTable;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataSet ds = GlobalFunc.GetDataSet("SELECT * from table0");
DataTable dt =ds.Tables[0];
objDataTable = ds.Tables[0]; CreateTree(TreeView1.Nodes, "0");
}
}