最近在做临测项目,涉及到了,实现用户的单选与多选,用户中从域中域中读取的.查找了一些资料,实现了此方法,大家一起分享一下.
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
}
}