<script language="javascript">
var listID_checked = new Array;   //选中的ID数组
var listID_unchecked = new Array; //没有选中的ID数组
//function for page_onload,this function for CHECKBOX which is checked mask checked!
function forChecked()
{
   for(var i=0;i<9;i++)
   {
     var node=TreeView1.getTreeNode(i.toString());
     writeIDchecked(node);
   }
}
//write checked into CheckBox 
function writeIDchecked(node)
{
    var i;
    var ChildNode=new Array();
    ChildNode=node.getChildren();
    node.setAttribute("Checked","false");
    if(boolvarl(node.getAttribute("ID")))
{
node.setAttribute("Checked","true");
}

for(i=0;i<ChildNode.length;i++)
{
var cNode;
cNode=ChildNode[i];
cNode.setAttribute("Checked","false");
if(boolvarl(cNode.getAttribute("ID")))
{
    cNode.setAttribute("Checked","true");
}
if(parseInt(cNode.getChildren().length)!=0)
{
writeIDchecked(cNode);
}
}
}
//judge it checked or not!
function boolvarl(ID)
{
    var i;
    var boolstring=false;
var IDList=document.all.TextBox1.value;
var GetID=new Array();
GetID=IDList.split(",");
   for(i=0;i<(GetID.length-1);i++)
   {
       if(ID==GetID[i])
        return true;
       if(ID!=GetID[i])
       {
       boolstring=false;
       }
   }
   if(boolstring==false)
   return false;
}//CHECKBOX的按纽响应方法!
function tree_oncheck(treev)
{
var node=treev.getTreeNode(event.treeNodeIndex);
setcheck(node);
}
function setcheck(node)
{
var i;
var ChildNode=new Array();
ChildNode=node.getChildren();

//首先处理其上级节点的状态
if (!node.getAttribute("checked")) { //如果没有选中,那么其所有的父节点状态都是未选中
var ParentNode = node.getParent();
while (ParentNode != null && ParentNode.getAttribute("checked")) {
ParentNode.setAttribute("checked", "false");

ParentNode = ParentNode.getParent();
}
}
else { //如果选中,那么检查同级节点,如果都选中,那么自动选中父节点,并且再检查父节点的同级节点
node.setAttribute("expanded", "true");
var ParentNode = node;
while ((ParentNode=ParentNode.getParent()) != null) {
var j = 0;
var BrotherNodes = new Array();
BrotherNodes = ParentNode.getChildren();
for (i = 0; i < BrotherNodes.length; i ++) {
if (BrotherNodes[i].getAttribute("Checked") == true) {
j++;
}
else {
i++;
break;
}
}
if (i == j) {
ParentNode.setAttribute("Checked", "true");
}
else {
break;
}
}
}

//现在处理子节点,将所有子节点都选中,或者取消选中
for(i=0;i<ChildNode.length;i++)
{
var cNode;
cNode=ChildNode[i];
cNode.setAttribute("Checked", node.getAttribute("Checked"));
if(parseInt(cNode.getChildren().length)!=0)
setcheck(cNode);
}
}//从Treeview中寻找被选中的所有节点
function FindCheckedFromTree(tree)
{
var i = 0;
var node;
//document.all.Text1.value = '';
//document.all.Text2.value = '';
while ((node=tree.getTreeNode(i.toString(10))) != null) 
{
FindCheckedFromNode(node);
i = i + 1;
}
document.all.Text1.value = listID_checked;
document.all.Text2.value = listID_unchecked; 
__doPostBack('LinkButton1','');
returnValue=true;
window.close();
}//从一个节点寻找其子节点所有被选中节点(递归)
function FindCheckedFromNode(node) {
var i = 0;
var nodes = new Array();
nodes = node.getChildren();
for (i = 0; i < nodes.length; i++) {
var cNode;
cNode=nodes[i];
if (cNode.getAttribute("Checked"))
{
listID_checked.push(cNode.getAttribute("ID"));
}
else
    {
listID_unchecked.push(cNode.getAttribute("ID"));
    }
if (parseInt(cNode.getChildren().length) != 0 )  //循环找子节点
{
FindCheckedFromNode(cNode);
}
}
}

解决方案 »

  1.   

    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 Microsoft.Web.UI.WebControls;
    using DasMS.BusinessFacade;namespace DasMS.WebUI.TestFlat
    {
    /// <summary>
    /// VersionUser_Edit 的摘要说明。
    /// </summary>
    public class VersionUser_Edit : System.Web.UI.Page
    {
    protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
    protected System.Web.UI.WebControls.Button Button2;
    protected System.Web.UI.HtmlControls.HtmlInputButton Buttion1;
    protected System.Web.UI.WebControls.LinkButton LinkButton1;
    protected System.Web.UI.WebControls.TextBox TextBox1;
    protected System.Web.UI.HtmlControls.HtmlInputText Text1;
    protected System.Web.UI.HtmlControls.HtmlInputText Text2;
    protected System.Web.UI.WebControls.LinkButton DataBinded;
    protected System.Web.UI.WebControls.Label testORupdate;
    protected static int membertype;
    protected static int VersionID;

    private void Page_Load(object sender, System.EventArgs e)
    {
    membertype = Convert.ToInt32(this.Request["type"]);
    VersionID = Convert.ToInt32(this.Request["VersionID"]);
    if(membertype == 1)
    {
    testORupdate.Text = "测试人员结构树";
    }
    else
    {
    testORupdate.Text = "修改人员结构树";
    }
    //构造TREEVIEW!
    if(!this.IsPostBack)
    {
    TreeView1.Attributes.Add("oncheck","tree_oncheck(this)");
    Button2.Attributes.Add("onclick","FindCheckedFromTree(TreeView1);");
    TreeView1.SelectExpands=true;
    TreeView1.ExpandLevel=1;
    Microsoft.Web.UI.WebControls.TreeNode  t1=new Microsoft.Web.UI.WebControls.TreeNode();
    creat_node("DAS-manager",t1,"561");
    BusinessFacade.bfTestFlat.C_Version l_Version = new BusinessFacade.bfTestFlat.C_Version(VersionID);
    if(membertype == 1)
    {
    this.TextBox1.Text = l_Version.GetTestorList();
    }
    else if(membertype ==2)
    {
    this.TextBox1.Text = l_Version.GetUpdatorList();
    }
    //creatMainNode();
    } } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.LinkButton1.Click += new System.EventHandler(this.LinkButton1_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    /// <summary>
    /// 保存结果
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void LinkButton1_Click(object sender, System.EventArgs e)
    {
    string[] ls_GetReasultTrue = Text1.Value.Split(',');
    if(ls_GetReasultTrue.Length > 0)
    {
    BusinessFacade.bfTestFlat.C_Version.UpdateMemberTree_clear(VersionID,membertype);
    }
    for(int i=0;i<ls_GetReasultTrue.Length;i++)
    {
    updateCheckTrue(ls_GetReasultTrue[i]);
    }
    //Response.Write("<script language='javascript'>returnValue='true'; window.close();</script>");
    } /// <summary>
    /// 生成TREEVIEW
    /// </summary>
    void  creat_node(string name,Microsoft.Web.UI.WebControls.TreeNode  t1,string  number)
    {
    //定义一个新的结点
    Microsoft.Web.UI.WebControls.TreeNode  t2=new Microsoft.Web.UI.WebControls.TreeNode();
    t2.ID=number;
    t2.Text=name;
    //TreeView1.ExpandedImageUrl="Image/ftp2.gif";
    if(Convert.ToInt32(t2.ID)==561)  //根节点
    {
    t2.CheckBox = false;
    //TreeView1.Nodes.Add(t2);
    }
    else
    {   //判断是否为根结点
    if(Convert.ToInt32(t2.ID) > 561 && Convert.ToInt32(t2.ID) < 600)
    {
    //t2.ImageUrl="Image/dir0.gif";
    t2.CheckBox=true;
    TreeView1.Nodes.Add(t2);
    }
    else
    {
    //t2.ImageUrl="Image/dir0.gif";
    //t1.ImageUrl="Image/dir0.gif";
    t2.CheckBox=true;
    t1.Nodes.Add(t2);
    }
    }

    //取得这个结点的所有子结点,利用递归自动生成
    DataTable ldt_Current = BusinessFacade.bfTestFlat.C_Version.MemberTree(Convert.ToInt32(number));
    for(int i=0;i<ldt_Current.Rows.Count;i++)
    {
    creat_node(ldt_Current.Rows[i]["Name"].ToString(),t2,ldt_Current.Rows[i]["ID"].ToString());
    }
    }
      

  2.   

    /// <summary>
    /// 保存将CHECK改为TRUE的
    /// </summary>
    /// <param name="ID"></param>
    private void updateCheckTrue(string ai_ID)
    {
    BusinessFacade.bfTestFlat.C_Version.UpdateMemberTree_ture(VersionID,Convert.ToInt32(ai_ID.Trim()),membertype);
    } }
    }