老大,我的测试代码如下:
aspx:
************************************
<%@ Page language="c#" Codebehind="WebForm6.aspx.cs" AutoEventWireup="false" Inherits="WebApplication2.WebForm6" %>
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<!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 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);
}
}
}//&#65393;&#12539;&#65415;&#65426;&#65403;&#65400;&#65434;&#65397;羈&#65403;&#65425;&#65377;&#65430;&#65424;
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">
<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" Checked="True" CheckBox="True" Text="Node1" Expanded="True">
<iewc:TreeNode NodeData="12" Checked="True" CheckBox="True" Text="Node10" Expanded="True"></iewc:TreeNode>
<iewc:TreeNode NodeData="13" Checked="True" CheckBox="True" Text="Node11" Expanded="True"></iewc:TreeNode>
<iewc:TreeNode NodeData="14" Checked="True" 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>
cs:
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;namespace WebApplication2
{
/// <summary>
/// Summary description for WebForm6.
/// </summary>
public class WebForm6 : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;

private void Page_Load(object sender, System.EventArgs e)
{
TreeView1.Attributes.Add("oncheck","tree_oncheck(this)");
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{    
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}

解决方案 »

  1.   

    不知你注意没有,当你在服务器端设置node的Checked属性为true后,在客户端使用getAttribute("checked"),得到的值永远是true
    不过初始化时你也可以在客户端设置,这样就不会出问题了
    改一下你的程序:<%@ 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);
    }
    }
    }//&#65393;&#12539;&#65415;&#65426;&#65403;&#65400;&#65434;&#65397;羈&#65403;&#65425;&#65377;&#65430;&#65424;
    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>
      

  2.   

    hgknight(江雨.net)的确是高手,确是在客户端绑定便是没有问题。
    只不过我单这样的树的程序有六七个,而且全都是用xml在服务器端绑定,修改的工作量巨大,您老是否可以帮我想想其它办法,用客户端javascript来修改已在服务器端绑定的数据
    谢谢
    结贴!