前台就不用说了吧,拖一个就行了,主要看后台代码: /// <summary> /// 绑定树 /// </summary> private void BingTree() { tvType.Nodes.Clear(); TreeNode node = new TreeNode(); IntiTree(node,0); } /// <summary> /// 绑定树形控件 /// 遍历子节点 自调用 /// </summary> /// <param name="node">节点</param> /// <param name="parentId">父节点ID</param> private void IntiTree(TreeNode node, int parentId) { sql = "SELECT * FROM dbo.[Zx_UnitType] WHERE ParentID = " + parentId + ""; DataTable dt = SelectEntity.BaseAccess.GetDataTable(sql); for (int i = 0; i < dt.Rows.Count; i++) { TreeNode cNode = new TreeNode(); cNode.Value = dt.Rows[i]["ID"].ToString(); cNode.Text = dt.Rows[i]["TypeName"].ToString(); //自调用 IntiTree(cNode, int.Parse(dt.Rows[i]["ID"].ToString())); node.ChildNodes.Add(cNode); } tvType.Nodes.Add(node); tvType.Nodes[0].ExpandAll(); } /// <summary> /// 改变选择结点事件 /// 选择节点 获取ID(隐藏控件) 和 名称(文本框) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void tvType_SelectedNodeChanged(object sender, EventArgs e) { //判断选节点深度 if (tvType.SelectedNode.Depth >= 2) { TreeNode node = tvType.SelectedNode; hfID.Value = node.Parent.Value + "," + node.Value; txtBName.Text = node.Parent.Text; txtXName.Text = node.Text; } else { txtBName.Text = ""; txtXName.Text = ""; hfID.Value = ""; } }