最近在做临测项目,涉及到了,实现用户的单选与多选,用户中从域中域中读取的.查找了一些资料,实现了此方法,大家一起分享一下.
UserTree.aspx
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>请选择用户</title>
  <meta content="Microsoft Visual Studio .NET 7.1" 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">
  <LINK href="../../appCssStyle/css.css" type="text/css" rel="stylesheet">
  <script language="javascript">
  <!--
  //设置所有节点选中状态
  function SetItemExpand(oColl,status) 
  { 
   var oChild; 
   for (var i=0;i<oColl.length;i++) 
   { 
    oChild = oColl[i]; 
    oChild.setAttribute("Checked",status);
    SetItemExpand(oChild.getChildren(),status);   
   }
  }
  
  //获得所有选中的节点
  function GetNode()
  {
   document.all.userid.value="";
   document.all.username.value="";
   GetCheckValue(document.all.TreeView1.getChildren());
   returnValue();
  }
  //返回值(单选)
  function returnValue()
  {
   //window.opener.document.all.tbReceiverID.value =document.all.userid.value;
   //window.opener.document.all.tbReciver.value=document.all.username.value;
     
   var strname = document.all.username.value;
   //alert(strname);
   window.opener.document.all.tbReciver.value = strname.substring(0,strname.length-1);
   
   var strid = document.all.userid.value;
   //alert(strid);
   window.opener.document.all.tbReceiverID.value = strid.substring(0,strid.length-1);
   window.close();
  
  }
  
  //返回值(多选)
  function returnValue_2()
  {
   //window.opener.document.all.tbReceiverID.value =document.all.userid.value;
   //window.opener.document.all.tbReciver.value=document.all.username.value;
 
  }
  
  
  //获得所有选中的节点
  function GetCheckValue(oColl) 
  {
   var oChild; 
   for (var i=0;i<oColl.length;i++) 
   { 
    oChild = oColl[i]; 
    
    if(oChild.getAttribute("checked"))
    {
     if(oChild.getAttribute("ID")!=null && oChild.getAttribute("ID")!="")
     {
      document.all.userid.value+=StrTrim(oChild.getAttribute("ID")) + ",";
      document.all.username.value+=StrTrim(oChild.getAttribute("Text")) + ",";
     }
    }
    GetCheckValue(oChild.getChildren());  
   }
  }
  //去除两边的空格
  function StrTrim(str) 
  { 
   return str.replace(/(^\s*)|(\s*$)/g, ""); 
  }
  
  //当单选时,触发此事件
  function ChangeAll(tnode)
  {
   SetItemExpand(document.all.TreeView1.getChildren(),false);
   var node=tnode.getTreeNode(tnode.clickedNodeIndex);
   node.setAttribute("Checked",true);
  }
  
  //当多选时触发oncheck事件
  function tree_oncheck(tree)
  {
   var node=tree.getTreeNode(tree.clickedNodeIndex);
   var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
   setcheck(node,Pchecked);
   //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();
   for (i = 0; i < nodes.length; i++) 
   {
    var cNode;
    cNode=nodes[i];
    if (parseInt(cNode.getChildren().length) != 0 ) 
    {
     FindCheckedFromNode(cNode);
    }
   }
  }
   
 
  -->
  </script>
 </HEAD>
 <body>
  <form id="Form1" method="post" runat="server">
    
   <table class="bg1" cellSpacing="0" borderColorDark="#ffffff" cellPadding="0" width="98%"
    align="center">
    <tr>
     <td height="26">
      <table cellSpacing="0" cellPadding="0" width="100%" border="0">
       <tr>
        <td width="1%"><IMG height="35" src="../../img/im_0007.gif" width="35"></td>
        <td class="bg001" vAlign="middle" align="left"><font class="bt001">选择用户 </font>
        </td>
       </tr>
      </table>
     </td>
    </tr>
    <tr>
     <td align="right">
      <table cellSpacing="0" cellPadding="0" width="85%" border="0">
       <tr>
        <td><iewc:treeview id="TreeView1" runat="server">
          <iewc:TreeNode Text="Node0" Expanded="True">
           <iewc:TreeNode Text="Node1"></iewc:TreeNode>
          </iewc:TreeNode>
         </iewc:treeview></td>
       </tr>
       <tr>
        <td vAlign="top" align="center"><INPUT class="cmd_but2" οnclick="GetNode()" type="button" value="确定"> <input class="cmd_but2" οnclick="window.close()" type="button" value="  取消  " name="btnCancel">
         <INPUT id="userid" style="WIDTH: 89px; HEIGHT: 22px" type="hidden" name="userid" runat="server">
         <INPUT id="username" style="WIDTH: 81px; HEIGHT: 22px" type="hidden" name="username" runat="server"></td>
       </tr>
      </table>
      <br>
     </td>
    </tr>
   </table>
  </form>
 </body>
</HTML>
UserTree.aspx.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;
using Microsoft.Web.UI.WebControls;
using System.Text;
namespace Archives.Common.SelectADUser
{
 /// <summary>
 /// UserTree 的摘要说明。
 /// </summary>
 public class UserTree : System.Web.UI.Page
 {
  protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
  protected System.Web.UI.HtmlControls.HtmlInputHidden userid;
  protected System.Web.UI.HtmlControls.HtmlInputHidden username;
 
  THS.Tools.DataAccess da=new THS.Tools.DataAccess();
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   if(!Page.IsPostBack)
   {
    InitTree();
   }
   //为多选时
   if(Request["Type"]!=null && Request["Type"].ToString()=="1")
   {
    TreeView1.Attributes.Add("oncheck","tree_oncheck(this)");
   }
   else //为单选时
   {
    TreeView1.Attributes.Add("oncheck","ChangeAll(this)");
   }
   
  }
  /// <summary>
  /// 初始化树
  /// </summary>
  public void InitTree()
  {
   bool Status=false;
   //为1时为多选,
   if(Request["Type"]!=null && Request["Type"].ToString()=="1")
   {
    Status=true;
   }
   TreeView1.Nodes.Clear();
   //获得部门
   string OUsql="SELECT * FROM V_ADUser ORDER BY OU";
   //部门数据
   DataTable Oudt=da.GetDataSet(OUsql,"aa").Tables["aa"];
   //用户数据
   string temp="";
   foreach(DataRow dr in Oudt.Rows)
   {
    if(dr["ou"].ToString().Length>2 && dr["ou"].ToString().Substring(0,2).ToLower()!="cn")
    {
     string str=dr["ou"].ToString();
     if(temp!=str)
     {
      temp=str;
      TreeNode tn=new TreeNode();
      tn.Text=dr["ou"].ToString();
      tn.ID=null;
      tn.ImageUrl ="../../img/treeview/1_0/images/folder.gif";
      tn.SelectedImageUrl="../../img/treeview/1_0/images/folderopen.gif";
      tn.ExpandedImageUrl="../../img/treeview/1_0/images/folderopen.gif";
      tn.CheckBox=Status;
      FillNode(Oudt,tn,dr["ou"].ToString());
      TreeView1.Nodes.Add(tn);
     }
     else
     {
      continue;
     }
    }
   }
  }
  /// <summary>
  /// 填充子节点
  /// </summary>
  public void FillNode(DataTable dt, TreeNode tn,string ou)
  {
   foreach(DataRow dr in dt.Rows)
   {
    if(dr["ou"].ToString()==ou)
    {
     TreeNode childNode=new TreeNode();
     childNode.Text=dr["DisName"].ToString();
     childNode.ID=dr["GUID"].ToString();
     childNode.CheckBox=true;
     childNode.ImageUrl="../../img/treeview/1_0/images/page.gif";
     childNode.SelectedImageUrl="../../img/treeview/1_0/images/page.gif";;
     tn.Nodes.Add(childNode);
    }
   }
  }
  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {    
   this.Load += new System.EventHandler(this.Page_Load);
  }
  #endregion
 }
}