TreeView怎么这么麻烦!

大可山人 2003-12-12 04:26:24
搞了几个小时了,TreeView怎么这么麻烦!

1、我想选中上一级的复选框,下一级的所有复选框展开且自动选中,同时另一个TextAreaA表单中的值加上所选复选框的ID值(不要闪烁,可以选完后再提交)。

2、反之,可以取消下一级的某些不需要选中的选项,TextAreaA中的值也跟着取消。如取消上一级复选框的选定,则下一级所有复选框如已为全部选中,则取消所有选中。否则,不做任何动作。

3、点击某个Node前的复选框后,自动选中此Node。

4、两个TreeView,名为:TreeView1,TreeView2
当从TreeView1选定某些项目后,点击“到TreeView2”按钮,则TreeView1中的项目自动减少,TreeView2增加相应项目。
...全文
11 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hgknight 2004-03-19
上面是一个完整的例子,复制即可运行

参考这儿
http://www.csdn.net/Develop/read_article.asp?id=22100
  • 打赏
  • 举报
回复
hgknight 2004-03-19
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="Delme.WebForm6" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm6</title>
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<script language="javascript">
<!--
function initchecknode()
{
var node=TreeView1.getTreeNode("1");
node.setAttribute("Checked","true");
setcheck(node,"true");
}
function tree_oncheck(tree)
{
var node=tree.getTreeNode(tree.clickedNodeIndex);
var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
setcheck(node,Pchecked);
document.WebForm6.aaaa.value="";
document.WebForm6.bbbb.value="";
FindCheckedFromNode(TreeView1);
}
function setcheck(node,Pc)
{
var i;
var ChildNode=new Array();
ChildNode=node.getChildren();

if(parseInt(ChildNode.length)==0)
return;
else
{
for(i=0;i<ChildNode.length;i++)
{
var cNode;
cNode=ChildNode[i];
if(parseInt(cNode.getChildren().length)!=0)
setcheck(cNode,Pc);
cNode.setAttribute("Checked",Pc);
}
}
}
function FindCheckedFromNode(node) {
var i = 0;
var nodes = new Array();
nodes = node.getChildren();

//alert('Now searching ' + ': ' + node.getAttribute("Text"));
for (i = 0; i < nodes.length; i++) {
var cNode;
cNode=nodes[i];
if (cNode.getAttribute("Checked"))
AddChecked(cNode);
else
AddUnChecked(cNode);

if (parseInt(cNode.getChildren().length) != 0 ) {
FindCheckedFromNode(cNode);
}
}
}


function AddChecked(node) {
//alert(node.getAttribute("Text") + ' is checked');
document.WebForm6.aaaa.value += node.getAttribute("NodeData");
document.WebForm6.aaaa.value += ',';
}
function AddUnChecked(node) {
//alert(node.getAttribute("Text") + ' is unchecked');
document.WebForm6.bbbb.value += node.getAttribute("NodeData");
document.WebForm6.bbbb.value += ',';
}
//-->
</script>
</HEAD>
<body MS_POSITIONING="GridLayout" onload="initchecknode()">
<form id="WebForm6" method="post" runat="server">
<iewc:treeview id="TreeView1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server" ExpandLevel="5" EnableViewState="False">
<iewc:TreeNode NodeData="1" CheckBox="True" Text="Node0" Expanded="True">
<iewc:TreeNode NodeData="2" CheckBox="True" Text="Node6" Expanded="True"></iewc:TreeNode>
<iewc:TreeNode NodeData="3" CheckBox="True" Text="Node7" Expanded="True">
<iewc:TreeNode NodeData="4" CheckBox="True" Text="Node17" Expanded="True"></iewc:TreeNode>
<iewc:TreeNode NodeData="5" CheckBox="True" Text="Node18" Expanded="True"></iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode NodeData="6" CheckBox="True" Text="Node8" Expanded="True">
<iewc:TreeNode NodeData="7" CheckBox="True" Text="Node19" Expanded="True"></iewc:TreeNode>
<iewc:TreeNode NodeData="8" CheckBox="True" Text="Node20" Expanded="True">
<iewc:TreeNode NodeData="9" CheckBox="True" Text="Node21" Expanded="True"></iewc:TreeNode>
</iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode NodeData="10" CheckBox="True" Text="Node9" Expanded="True"></iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode NodeData="11" CheckBox="True" Text="Node1" Expanded="True">
<iewc:TreeNode NodeData="12" CheckBox="True" Text="Node10" Expanded="True"></iewc:TreeNode>
<iewc:TreeNode NodeData="13" CheckBox="True" Text="Node11" Expanded="True"></iewc:TreeNode>
<iewc:TreeNode NodeData="14" CheckBox="True" Text="Node12" Expanded="True"></iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode NodeData="15" CheckBox="True" Text="Node2" Expanded="True">
<iewc:TreeNode NodeData="16" CheckBox="True" Text="Node13" Expanded="True"></iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode NodeData="17" CheckBox="True" Text="Node3" Expanded="True">
<iewc:TreeNode NodeData="18" CheckBox="True" Text="Node14" Expanded="True"></iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode NodeData="19" CheckBox="True" Text="Node5" Expanded="True">
<iewc:TreeNode NodeData="20" CheckBox="True" Text="Node16" Expanded="True"></iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode NodeData="21" CheckBox="True" Text="Node4" Expanded="True">
<iewc:TreeNode NodeData="22" CheckBox="True" Text="Node15" Expanded="True"></iewc:TreeNode>
</iewc:TreeNode>
</iewc:treeview><INPUT style="Z-INDEX: 103; LEFT: 366px; POSITION: absolute; TOP: 230px" onclick="FindCheckedFromNode(TreeView1)" type="button" value="Button">
<INPUT id="aaaa" style="Z-INDEX: 102; LEFT: 248px; WIDTH: 421px; POSITION: absolute; TOP: 161px; HEIGHT: 22px" type="text" size="64">
<INPUT id="bbbb" style="Z-INDEX: 102; LEFT: 248px; WIDTH: 421px; POSITION: absolute; TOP: 361px; HEIGHT: 22px" type="text" size="64">
</form>
</body>
</HTML>
  • 打赏
  • 举报
回复
qynum123 2004-03-19
学习中.....
  • 打赏
  • 举报
回复
super76 2004-03-19
http://www.microsoft.com/china/msdn/library/dnaspp/html/aspnet-usingtreeviewiewebcontrol.asp
  • 打赏
  • 举报
回复
jpyc 2004-03-19
首先保证装好你的组件,这个包安装非常方便,只要运行一下即可在VS.NET中使用了:
http://218.56.11.178:8018/FileDown.aspx?FID=4

看看这个例子,对你一定有启发:
http://218.56.11.178:8018/FileDown.aspx?FID=246

这个论坛也使用了树:
http://218.56.11.178:8018/FileDown.aspx?FID=212

论坛的使用演示地址,在这里:
http://expert.kaer.cn/

提供站点:http://soft.kaer.cn 希望大家多支持!
ftp://soft.kaer.cn 可以直接用IE匿名访问,目前速度没限制。
  • 打赏
  • 举报
回复
大可山人 2003-12-29
再不回复就无法结贴了。
  • 打赏
  • 举报
回复
大可山人 2003-12-28
没有响应?
  • 打赏
  • 举报
回复
hivak47 2003-12-25
我感觉johnsuna(缘来是e)说的有道理。试一试吧。。
  • 打赏
  • 举报
回复
大可山人 2003-12-25
UP
  • 打赏
  • 举报
回复
大可山人 2003-12-13
原代码:
<!-- #include file="functions.aspx" -->
<%@ Register TagPrefix="IE" Namespace="Microsoft.Web.UI.WebControls"
Assembly="Microsoft.Web.UI.WebControls" %>
<Script language="C#" runat="server">
static DataSet dsArticleType;
private void Page_Load(object sender, System.EventArgs e)
{
TreeView1.Attributes.Add("onselectedindexchange","return TreeView1_AfterCheck()");
if(!IsPostBack)
{
try
{
//初始化连接字符串
dsArticleType = new DataSet();
string strTable="ArticleType";
string strSQL="Select * from ArticleType Order by OrderID";
// string strSQL="Select ArticleID,ParentID,TypeName,TypeID from ArticleType Order by OrderID";
dsArticleType=CreateDataSet(strSQL,strConnString,strTable);
}
catch (Exception ex)
{
// Session["Error"] = ex.ToString();
// Response.Redirect("error.aspx"); //跳转程序的公共错误处理页面
}
finally
{
}
//调用递归函数,完成树形结构的生成
AddTree("0",(TreeNode)null);
}

}

// 递归添加树的节点
public void AddTree(string ParentID,TreeNode pNode)
{
DataView dvTree = new DataView(dsArticleType.Tables["ArticleType"]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[ParentId] = '" + ParentID + "'";
foreach(DataRowView Row in dvTree)
{
TreeNode Node=new TreeNode() ;
if(pNode == null)
{ //'?添加根节点
Node.Text = Row["TypeName"].ToString();
// Node.CheckBox = true;
TreeView1.Nodes.Add(Node);
AddTree(Row["ArticleTypeId"].ToString(), Node); //再次递归
}
else
{ //添加当前节点的子节点
Node.Text = Row["TypeName"].ToString();
Node.CheckBox = true;
Node.ID=Row["TypeId"].ToString();
pNode.Nodes.Add(Node);
AddTree(Row["ArticleTypeId"].ToString(),Node); //再次递归
}
}
}
private void TreeView1_Expand(object sender,TreeViewClickEventArgs e)
{

}

//得到选中节点的值:
private void TreeView1_SelectedIndexChange(object sender, TreeViewSelectEventArgs e)
{
TreeNode NewNode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);
SelectedTypeIDs.Value =NewNode.Text;
}
private void TreeView1_Check(object sender,TreeViewClickEventArgs e)
{
TreeNode NewNode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);
SelectedTypeIDs.Value += NewNode.Text;
// CheckNodes(e.Node); // e为事件的方法中的参数e
expand(TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex));
}

private void expand(TreeNode node)
{
foreach(TreeNode tempNode in node.Nodes)
{

expand(tempNode);
}
}


private void CheckNodes(TreeNode pNode)
{
foreach(TreeNode node in pNode.Nodes)
{
if(node.Nodes.Count > 0)
{
CheckNodes(node);
}
node.Checked = pNode.Checked;
}
}
</Script>
<Script language="JavaScript">
function TreeView1_AfterCheck()
{
//alert("可以。");
}
</Script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>新闻栏目分类</title>
</head>
<body>
<form runat="server">
<IE:TreeView id="TreeView1" runat="server" EXPANDLEVEL=1
autopostback="true"
onexpand="TreeView1_Expand" oncheck="TreeView1_Check"/>
<input type="text" id="SelectedTypeIDs" name="SelectedTypeIDs" runat="server">
</form>
</body>
</html>

数据库结构:
ArticleTypeID(自动增加ID 主键)
ParentID(父ID)
TypeName(新闻栏目名称)
TypeRow(栏目级别,一级用1表示、二级2、三级3……想实现无限制级分类)
TypeID(栏目ID号,每一级别用两位数表示,即TypeRow=1时为两位,TypeRow为2时有4位数字……,最前面的两位与对应的一级栏目TypeID一样,接着与二级栏目TypeID一样)
OrderID(栏目排序ID,起排序作用而已)
类似:
ArticleTypeID ParentID TypeName TypeRow TypeID OrderID
100 0 新闻系统 0 0 0
107 132 国内要闻 3 143265 11
109 131 文娱频道 3 206083 13
110 131 体育新闻 3 206015 14
111 131 教育/校园 3 206038 15
112 132 港澳台新闻 3 143244 17
113 132 海峡两岸 3 143262 18
114 130 国际要闻 3 123706 19
115 130 国际财经 3 123715 27
116 130 国际社会A 3 123734 21
117 133 国际军事 3 266683 22
129 100 报版文章 1 11 10
130 100 即时新闻 1 12 20
131 100 专题新闻 1 20 30
132 100 头条图片 1 14 40
133 100 图片专题 1 26 50
134 130 国际新闻 2 1237 6
135 132 国内新闻 2 1432 7
137 107 广东新闻 4 14326511 55
  • 打赏
  • 举报
回复
相关推荐
发帖
.NET社区
加入

6.0w+

社区成员

.NET技术交流专区
帖子事件
创建了帖子
2003-12-12 04:26
社区公告

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

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