请问一下TreeView控件我想遍历所有的节点有没有这个属性的?谢谢.

sky1982 2005-01-18 07:46:21
如:
foreach (TreeNode myNode in Test.Nodes)
{
// Check whether the tree node is checked.
if(myNode.Checked)
{
// Set the node's backColor.
Page.Response.Write(myNode.Text);
Response.Write("<BR>");
}

}

只能遍历一层...我想遍历所有层的.谢谢.
...全文
602 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
boytomato 2005-01-19
  • 打赏
  • 举报
回复
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
protected System.Web.UI.WebControls.TextBox TextBox1;
string s="";

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
this.addnode (this.TreeView1 );
this.TreeView1.ExpandLevel =2;
}

public void addnode(Microsoft.Web .UI .WebControls .TreeView dt)

{
for (int i =0;i<10;i ++)
{
Microsoft.Web .UI .WebControls .TreeNode node=new Microsoft.Web.UI.WebControls.TreeNode();
if (i%2==0)
{
node.CheckBox=true;
node.Checked=true;
}
node.Text=i.ToString ();

for(int j=0;j<2;j++)
{
Microsoft.Web .UI .WebControls .TreeNode node1=new Microsoft.Web.UI.WebControls.TreeNode();
node1.Text=i.ToString()+"."+j.ToString ();
if (j%2==0)
{
node1.CheckBox=true;
node1.Checked=true;
}
for(int k=0;k<4;k++)
{
Microsoft.Web .UI .WebControls .TreeNode node2=new Microsoft.Web.UI.WebControls.TreeNode();
node2.Text=i.ToString()+"."+j.ToString ()+k.ToString();
if (k%2==0)
{
node2.CheckBox =true;
node2.Checked=true;

}
node1.Nodes .Add(node2);

}

node.Nodes .Add (node1);
}

dt.Nodes .Add (node);
}

}

public void Show_allnode(Microsoft.Web .UI .WebControls.TreeNodeCollection node)
{

foreach(Microsoft.Web .UI .WebControls.TreeNode no in node)
{


if (no.Checked)
s=s+no.Text+"!";
if (no.Nodes .Count >0)
Show_allnode(no.Nodes);


}

}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{

this.Show_allnode(this.TreeView1.Nodes);

this.TextBox1 .Text=s;
}
morality 2005-01-19
  • 打赏
  • 举报
回复
js遍历所有节点
var AllRootNode=new Array();
AllRootNode=TreeView1.getChildren();
AlertNode(AllRootNode);

function AlertNode(NodeArray)
{
if(parseInt(NodeArray.length)==0)
return;
else
{
for(i=0;i<NodeArray.length;i++)
{
var cNode;
cNode=NodeArray[i];
alert(cNode.getAttribute("Text"));
if(parseInt(cNode.getChildren().length)!=0)
AlertNode(cNode.getChildren());
}
}
}

morality 2005-01-19
  • 打赏
  • 举报
回复
void GetAllNodeText(TreeNodeCollection tnc)
{
foreach(TreeNode node in tnc)
{
if(node.Nodes.Count!=0)
GetAllNodeText(node.Nodes);
Response.Write(node.Text + " ");
}
}
lxw99 2005-01-19
  • 打赏
  • 举报
回复
unction GetNode()
{
var choose;
var indexid;
indexid=TreeView1.clickedNodeIndex;

if (TreeView1.getTreeNode(indexid).getAttribute('Checked'))
{
choose=true;
}
else
{
choose=false;
}
// TreeView1.getTreeNode(indexid).setAttribute('Checked',choose);
var NodeArray=new Array();
NodeArray=TreeView1.getTreeNode(indexid).getChildren();
for(i=0;i<NodeArray.length;i++)
{
var tempindex=indexid+"."+i;
TreeView1.getTreeNode(tempindex).setAttribute('Checked',choose);
// window.alert(TreeView1.getTreeNode(indexid).text);
}


}
javascript 的
//某结点取消函数
function quxiao(node)
{
var ChildNode=new Array();
ChildNode=node.getChildren();
if(parseInt(ChildNode.length)==0)
node.setAttribute("Checked",false);
else
{
node.setAttribute("Checked",false);
for(var i=0;i<ChildNode.length;i++)
{
var cNode=ChildNode[i];
if(parseInt(cNode.getChildren().length)!=0)
{quxiao(cNode.getChildren());}
cNode.setAttribute("Checked",false);
}
}
}


//选父节点,也选子节点函数
function setcheck(node,Pc)
{
var i = 0;
var ChildNode=new Array();
ChildNode=node.getChildren();
if(parseInt(ChildNode.length)==0)
return;
else
{
for(var i=0;i<ChildNode.length;i++)
{
var cNode;
cNode=ChildNode[i];
if(parseInt(cNode.getChildren().length)!=0)
setcheck(cNode,Pc);
cNode.setAttribute("Checked",Pc);
}
}
}
如果有子节点被选中,那么父节点就会被选中。
代码如下。(付送一个从XML文件中读取节点信息的函数。XML格式:<aa name="aaa"/>)
Private Sub TreeView1_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck
Try
TreeView1.BeginUpdate()
If e.Action <> Windows.Forms.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
If Not e.Node.Parent Is Nothing Then
Me.CheckParentNodes(e.Node.Parent)
End If
End If
TreeView1.EndUpdate()
Catch ex As Exception
Windows.Forms.MessageBox.Show(ex.Message)
End Try
End Sub

Private Sub CheckAllChildNodes(ByVal treeNode As Windows.Forms.TreeNode, ByVal nodeChecked As Boolean)
Dim node As Windows.Forms.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

Private Sub CheckParentNodes(ByVal treeNode As Windows.Forms.TreeNode)
Dim node As Windows.Forms.TreeNode
Dim flag As Boolean = False
For Each node In treeNode.Nodes
If node.Checked Then
flag = True
End If
Next
treeNode.Checked = flag
If Not treeNode.Parent Is Nothing Then
Me.CheckParentNodes(treeNode.Parent)
End If
End Sub

Private Sub populateTreeControl(ByVal document As System.Xml.XmlNode, ByVal nodes As System.Windows.Forms.TreeNodeCollection)
Dim node As System.Xml.XmlNode
For Each node In document.ChildNodes
Dim [text] As String
If node.Value <> Nothing Then
[text] = node.Value
Else
If Not node.Attributes Is Nothing And _
node.Attributes.Count > 0 Then
[text] = node.Attributes(0).Value
Else
[text] = node.Name
End If
End If

Dim newChild As New System.Windows.Forms.TreeNode([text])
nodes.Add(newChild)
populateTreeControl(node, newChild.Nodes)
Next node
End Sub
在客户端用 js 来实现结点的选择:


<script language="javascript">
<!--
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;
}
}

//初始化选中节点
lxw99 2005-01-19
  • 打赏
  • 举报
回复
错了
lxw99 2005-01-19
  • 打赏
  • 举报
回复
<?xml version="1.0" standalone="yes" ?>
<SqlMapping>
<UserDefineSQL>
<!--得到当前登录用户的密码-->
<SQL ID="SqlAuthorityManagerGetPassword" CommandType="Text" SqlString="SELECT Password FROM employee WHERE id=@Username">
<PARAM name="@Username" value="" valueType="System.String"/>
</SQL>
<!--JobLog查询函数根据标题,时间查询-->
<SQL ID="WorkTaskManager01" CommandType="Text" SqlString="SELECT * FROM JobLog WHERE (@Title = ' ' OR (@Title <> ' ' AND Title like '%' + @Title + '%')) AND (@LastTime < PubDate) AND (@NextTime > PubDate)">
<PARAM name="@Title" value="" valueType="System.String"/>
<PARAM name="@LastTime" value="" valueType="System.DateTime"/>
<PARAM name="@NextTime" value="" valueType="System.DateTime"/>
</SQL>
<SQL ID="DepartmentManager02" CommandType="Text" SqlString="SELECT * FROM Department">
</SQL>
<!--Message根据接受人查询数据库-->
<SQL ID="MessageManager01" CommandType="Text" SqlString="SELECT a.title,a.pubDate,a.senderId,b.isRead,b.id,c.Name as receiverName,d.Name as senderName FROM Message a,MessageTo b ,Employee c ,Employee d where a.id = b.messageId and a.senderId = d.id and b.receiverId = c.id and b.ReceiverId = @UserId and b.isVisibleId = '1' ">
<PARAM name="@UserId" value="" valueType="System.String"/>
</SQL>
<!--Message根据发送人和消息位置查出数据-->
<SQL ID="MessageManager02" CommandType="Text" SqlString="SELECT a.title,a.id,a.pubDate,b.name, c.isRead FROM message a,Employee b,messageto c Where a.id=c.messageid and b.id =c.receiverid and a.senderid = @UserId and a.IsVisibleId = '1' and a.MessageStateId = @MessageStateId ">
<PARAM name="@UserId" value="" valueType="System.String"/>
<PARAM name="@MessageStateId" value="" valueType="System.Int"/>
</SQL>
<!--Message根据messageId来查出数据-->
<SQL ID="MessageManager03" CommandType="Text" SqlString="select b.isRead,c.name from message a,messageTo b,Employee c where a.id=b.messageId and b.receiverId=c.id and b.messageId = @MessageId ">
<PARAM name="@MessageId" value="" valueType="System.int"/>
</SQL>
<SQL ID="MessageManager04" CommandType="Text" SqlString="select top 1 id from message order by id desc">
</SQL>
<SQL ID="MessageManager05" CommandType="Text" SqlString="Delete * from MessageTo where messageId = @MessageId ">
<PARAM name="@MessageId" value="" valueType="System.Int"/>
</SQL>
<!--用户控件函数-->
<SQL ID="SqlUserControlGetEmployee0" CommandType="Text" SqlString="SELECT * FROM Employee WHERE (DepartmentId=@departmentid OR (@departmentid='-1') AND (@name='' OR (name like '%' + @name + '%')))">
<PARAM name="@name" value="" valueType="System.String"/>
<PARAM name="@departmentid" value="" valueType="System.String"/>
</SQL>
<!--用户控件函数-->
<!--获得所有菜单信息-->
<SQL ID="SqlMenuGetMenu" CommandType="Text" SqlString="Select * from Menu">
</SQL>
</UserDefineSQL>
</SqlMapping>
boytomato 2005-01-18
  • 打赏
  • 举报
回复
TreeNode newNode=new TreeNode();

你可以用newNode.Text
或者用 newNode.Nodedata
来存数据.然后把它显示出来就行了.
if (newNode.Checked)
表示选中.....
然后用递归查找

你说的.我都迷糊了...
下面的全点自己看把...

http://community.csdn.net/Expert/topic/3483/3483208.xml?temp=.5832483
sky1982 2005-01-18
  • 打赏
  • 举报
回复
谢谢,可以帮我用C#写一下吗?
用递归绑数据我会的.

我现在想做的就是treeview把所有复选框选中的节点ID值输出来...:(
请再帮忙一下.
boytomato 2005-01-18
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3483/3483208.xml?temp=.5832483
boytomato 2005-01-18
  • 打赏
  • 举报
回复
private TreeNode ShowAllTree(int ddd ,OleDbConnection oleDbConnection1,Microsoft.Web.UI.WebControls.TreeNode node)
{
string sqlSelect =
"SELECT id_,id_c,name_ FROM asp_tree where id_='"+ddd+"'" ;
OleDbDataAdapter da = new OleDbDataAdapter(sqlSelect, oleDbConnection1);
DataTable dt=new DataTable();
da.Fill(dt);



for(int i=0;i<dt.Rows.Count;i++)
{
TreeNode newNode=new TreeNode();
DataRow dr=dt.Rows[i];


newNode.Text="<font color=#ffffff >"+ dr["name_"].ToString()+"</font>";

// newNode.Text=dr["name_"].ToString ();

newNode.ImageUrl="Images/283.gif";


node.Nodes.Add(newNode);

int newID = Convert.ToInt32 (dt.Rows[i][1]);;

ShowAllTree(newID,this.oleDbConnection1 ,newNode); //递归调用,将子结点ID当做下一当前结点ID

}

dt.Dispose();


return node;

}
递归调用...
webserv2 2005-01-18
  • 打赏
  • 举报
回复
函数递归!
参考下面:

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

62,071

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧