Private Sub BuildTree() BbsAll.Nodes.Add("请选择要发帖的版块") BbsAll.SelectedNode = BbsAll.Nodes(0) Dim dv As DataView = mBroads.DefaultView() dv.Sort = "类别" For i As Integer = 0 To dv.Count - 1 If dv(i).Item(3) <> BbsAll.SelectedNode.Text Then Dim treenode As New TreeNode(dv(i).Item(3)) treenode.Tag = dv(i).Item(1) BbsAll.Nodes(0).Nodes.Add(treenode) BbsAll.SelectedNode = treenode Dim streenode As New TreeNode(dv(i).Item(4)) streenode.Tag = dv(i).Item(1) BbsAll.SelectedNode.Nodes.Add(streenode) Else Dim treenode As New TreeNode(dv(i).Item(4)) treenode.Tag = dv(i).Item(1) BbsAll.SelectedNode.Nodes.Add(treenode) End If Next BbsAll.SelectedNode = BbsAll.Nodes(0) End Sub Private Sub BbsAll_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles BbsAll.AfterCheck If e.Action <> TreeViewAction.Unknown Then If e.Node.Nodes.Count > 0 Then ' Calls the CheckAllChildNodes method, passing in the current ' Checked value of the TreeNode whose checked state changed. Me.CheckAllChildNodes(e.Node, e.Node.Checked) End If End If End Sub Private Sub CheckAllChildNodes(ByVal treeNode As TreeNode, ByVal nodeChecked As Boolean) Dim node As TreeNode For Each node In treeNode.Nodes node.Checked = nodeChecked If node.Nodes.Count > 0 Then ' If the current node has child nodes, call the CheckAllChildsNodes method recursively. Me.CheckAllChildNodes(node, nodeChecked) End If Next node End Sub #End Region
通过递归条用实现树的初始化: 以下代码工参考: using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Configuration; using Microsoft.Web.UI.WebControls;namespace NCMT { /// <summary> /// SelectFunc 的摘要说明。 /// </summary> public class SelectFunc : System.Web.UI.Page { protected Microsoft.Web.UI.WebControls.TreeView tvwFunc; protected System.Web.UI.WebControls.Panel panItem;
} } //创建数据集 private DataSet CreateDataSet() { //sSql = "Select * From T_Navigation Where F_OutOrIn = 'InNavi' Order By ID,F_NodeName"; sSql = "Select * From T_Function Order By ID,F_NodeName"; apt = new SqlDataAdapter(sSql,conn); ds = new DataSet(); apt.Fill(ds,"dtFunc"); return ds; }
//初始化选中节点 function initCheckedNode() { var trids = window.dialogArguments; var arrCheckedId = new Array(); var arrUncheckedId = new Array(); if(trids != null) { arrCheckedId = trids.split(","); var tvwFunc = document.getElementById("tvwFunc"); var arrAllRootNode = new Array(); arrAllRootNode = tvwFunc.getChildren();
try { for(var i = 0; i < arrCheckedId.length; i++) { FindOriFuncNode(arrAllRootNode,arrCheckedId[i]); } } catch(e) { alert(e); }
} }
//第归调用遍历所有树形节点 function FindOriFuncNode(NodeArray,nodeID) { if(parseInt(NodeArray.length) == 0) { return; } else { for(var i = 0; i < NodeArray.length; i++) { var cNode = NodeArray[i]; if(cNode.getAttribute("ID") == nodeID) { cNode.setAttribute("Checked","true"); break; }
http://www.asp.net/IEWebControls/Download.aspx?tabindex=0&tabid=1
里面有TreeView控件可以加复选框
BbsAll.Nodes.Add("请选择要发帖的版块")
BbsAll.SelectedNode = BbsAll.Nodes(0)
Dim dv As DataView = mBroads.DefaultView()
dv.Sort = "类别"
For i As Integer = 0 To dv.Count - 1
If dv(i).Item(3) <> BbsAll.SelectedNode.Text Then Dim treenode As New TreeNode(dv(i).Item(3))
treenode.Tag = dv(i).Item(1) BbsAll.Nodes(0).Nodes.Add(treenode)
BbsAll.SelectedNode = treenode
Dim streenode As New TreeNode(dv(i).Item(4))
streenode.Tag = dv(i).Item(1) BbsAll.SelectedNode.Nodes.Add(streenode) Else
Dim treenode As New TreeNode(dv(i).Item(4))
treenode.Tag = dv(i).Item(1) BbsAll.SelectedNode.Nodes.Add(treenode) End If Next BbsAll.SelectedNode = BbsAll.Nodes(0)
End Sub Private Sub BbsAll_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles BbsAll.AfterCheck
If e.Action <> TreeViewAction.Unknown Then
If e.Node.Nodes.Count > 0 Then
' Calls the CheckAllChildNodes method, passing in the current
' Checked value of the TreeNode whose checked state changed.
Me.CheckAllChildNodes(e.Node, e.Node.Checked)
End If
End If End Sub Private Sub CheckAllChildNodes(ByVal treeNode As TreeNode, ByVal nodeChecked As Boolean)
Dim node As TreeNode
For Each node In treeNode.Nodes
node.Checked = nodeChecked
If node.Nodes.Count > 0 Then
' If the current node has child nodes, call the CheckAllChildsNodes method recursively.
Me.CheckAllChildNodes(node, nodeChecked)
End If
Next node
End Sub
#End Region
另外有一个叫什么阿赖的什么树,你网上搜一下.那是js
我用的就是这个实现你要的功能
以下代码工参考:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;
using Microsoft.Web.UI.WebControls;namespace NCMT
{
/// <summary>
/// SelectFunc 的摘要说明。
/// </summary>
public class SelectFunc : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView tvwFunc;
protected System.Web.UI.WebControls.Panel panItem;
protected string sSql = null;
protected SqlConnection conn;
protected SqlDataAdapter apt;
protected DataSet ds;
//private static string strTypeID = ""; private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
string sConn = ConfigurationSettings.AppSettings["NCMT"];
conn = new SqlConnection(sConn);
CreateDataSet();
InitFuncTree(tvwFunc.Nodes,"0");
//注册客户端 oncheck 事件
tvwFunc.Attributes.Add("oncheck","tree_oncheck(document.getElementById('tvwFunc'))");
}
} //创建数据集
private DataSet CreateDataSet()
{
//sSql = "Select * From T_Navigation Where F_OutOrIn = 'InNavi' Order By ID,F_NodeName";
sSql = "Select * From T_Function Order By ID,F_NodeName";
apt = new SqlDataAdapter(sSql,conn);
ds = new DataSet();
apt.Fill(ds,"dtFunc");
return ds;
}
//初始化科目树,并通过递归调用显示子树
private void InitFuncTree(TreeNodeCollection tncCurrent,string sParentID)
{
DataView dvwFunc = new DataView();
TreeNode nodTemp;
dvwFunc.Table = ds.Tables["dtFunc"];
dvwFunc.RowFilter = "F_ParentID = '" + sParentID + "'";
foreach(DataRowView drvFunc in dvwFunc)
{
nodTemp = new TreeNode();
nodTemp.CheckBox = true;
nodTemp.ID = drvFunc["F_NodeID"].ToString();
nodTemp.Text = drvFunc["F_NodeName"].ToString();
nodTemp.NodeData = drvFunc["F_NodeID"].ToString(); tncCurrent.Add(nodTemp);
//递归调用显示子树
InitFuncTree(nodTemp.Nodes,nodTemp.ID);
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.tvwFunc.Check += new Microsoft.Web.UI.WebControls.ClickEventHandler(this.tvwFunc_Check);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void tvwFunc_Check(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
{
tvwFunc.GetNodeFromIndex(tvwFunc.SelectedNodeIndex).Checked = true;
}
}
}
<!--
var strFuncs = ""; //功能节点ID字符串
var strSepa = ","; //功能节点ID字符串的分隔符
//单击"取消"按钮
function btnCancel_Click()
{
self.close();
}
//单击"确定"按钮,得到所选择的所有功能选项
function btnOK_Click()
{
var tvwFunc1 = document.getElementById("tvwFunc");
var strFunc = "";
var allRootNodes = new Array();
allRootNodes = tvwFunc1.getChildren();
strFunc = getCheckedNodeID(allRootNodes);
window.parent.returnValue = strFunc; //向父页面返回功能节点ID
self.close();
}
//遍历所有节点,获取所有选中节点的 ID 号
function getCheckedNodeID(NodeArray)
{
if(parseInt(NodeArray.length) == 0)
{
return;
}
else
{
for(var i = 0; i < NodeArray.length; i++)
{
var cNode;
cNode = NodeArray[i];
if(cNode.getAttribute("Checked") == true)
{
strFuncs = strFuncs + cNode.getAttribute("ID") + strSepa;
}
if(cNode.getChildren().length != 0)
{
//第归调用
getCheckedNodeID(cNode.getChildren());
}
}
}
var iPos = strFuncs.lastIndexOf(",");
if(iPos != 0)
{
return strFuncs.substring(0,iPos);
}
else
{
return strFuncs;
}
}
//初始化选中节点
function initCheckedNode()
{
var trids = window.dialogArguments;
var arrCheckedId = new Array();
var arrUncheckedId = new Array();
if(trids != null)
{
arrCheckedId = trids.split(",");
var tvwFunc = document.getElementById("tvwFunc");
var arrAllRootNode = new Array();
arrAllRootNode = tvwFunc.getChildren();
try
{
for(var i = 0; i < arrCheckedId.length; i++)
{
FindOriFuncNode(arrAllRootNode,arrCheckedId[i]);
}
}
catch(e)
{
alert(e);
}
}
}
//第归调用遍历所有树形节点
function FindOriFuncNode(NodeArray,nodeID)
{
if(parseInt(NodeArray.length) == 0)
{
return;
}
else
{
for(var i = 0; i < NodeArray.length; i++)
{
var cNode = NodeArray[i];
if(cNode.getAttribute("ID") == nodeID)
{
cNode.setAttribute("Checked","true");
break;
}
if(parseInt(cNode.getChildren().length) != 0)
{
FindOriFuncNode(cNode.getChildren(),nodeID);
}
}
}
}
//oncheck事件
function tree_oncheck(tree)
{
var node = tree.getTreeNode(tree.clickedNodeIndex);
var blChecked = node.getAttribute("Checked");
//设置子节点选中
setCheck(node,blChecked);
//设置父节点选中
setParentNode(node);
document.all.checkedNodes.value = "";
document.all.uncheckedNodes.value = "";
FindCheckedFromNode(document.getElementById("tvwFunc"));
}
//设置子节点状态
function setCheck(node,blChecked)
{
var childNodes = new Array();
childNodes = node.getChildren();
if(parseInt(childNodes.length) == 0)
{
return;
}
else
{
for(var i = 0; i < childNodes.length; i++)
{
var cNode = childNodes[i];
if(parseInt(cNode.getChildren().length) != 0)
{
//递归调用
setCheck(cNode,blChecked);
}
cNode.setAttribute("Checked",blChecked);
}
}
}
//设置父节点状态,
function setParentNode(node)
{
if(node.getAttribute("Checked"))
{
//如果节点选中,则设置所有父节点选中
var parentNode = node.getParent();
while(parentNode != null)
{
parentNode.setAttribute("Checked","true");
parentNode = parentNode.getParent();
}
}
else
{
var blChecked = false;
var parentNode = node.getParent();
if(parentNode != null)
{
var arrBrotherNode = parentNode.getChildren();
for(var i = 0; i < arrBrotherNode.length; i++)
{
var bNode = arrBrotherNode[i];
if(bNode.getAttribute("Checked"))
{
blChecked = true;
break;
}
}
// 如果所有子节点CheckBox为假,则设置父节点为假
if(blChecked == false)
{
parentNode.setAttribute("Checked","false");
}
}
}
}
//获取所有节点状态
function FindCheckedFromNode(tree)
{
var allNodes = new Array();
allNodes = tree.getChildren();
for(var i = 0; i < allNodes.length; i++)
{
var cNode;
cNode = allNodes[i];
if(cNode.getAttribute("Checked"))
{
addCheckedNode(cNode);
}
else
{
addUncheckedNode(cNode);
}
if(cNode.getChildren().length != 0)
{
//递归调用
FindCheckedFromNode(cNode);
}
}
}
//添加选中节点
function addCheckedNode(node)
{
document.all.checkedNodes.value += node.getAttribute("NodeData");
document.all.checkedNodes.value += ',';
}
//添加未选中节点
function addUncheckedNode(node)
{
document.all.uncheckedNodes.value += node.getAttribute("NodeData");
document.all.uncheckedNodes.value += ',';
}
//-->
</script>