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

}
}

转载于:https://www.cnblogs.com/wangzhq/articles/465293.html

TreeView 实现单选与多选!相关推荐

  1. Android CheckedTextView 实现单选与多选

    以下demo 地址 单选与双选实现的效果如下 CheckedTextView 继承的是 TextView 实现 Checkable 具有TextView 的属性 一般使用结合ListView xml ...

  2. 改变单选或者复选框的样式

    原理是通过定位把以前的样式覆盖掉,就酱... 代码如下: css.checkbox{position: relative;padding-left: 8px;}.checkbox:before{con ...

  3. php一些单选、复选框的默认选择方法(示例)

    转载 http://www.php.cn/php-weizijiaocheng-360029.html 一. radio和checkbox及php select默认选择的实现代码 1.radio单选框 ...

  4. vue单选,多选,多选的内容显示在页面可删除

    vue做单选只能选一个 <template><div class="list"><!-- 多行多列单选 --><span>只能选一个 ...

  5. php input多选,利用css3更改input单选和多选样式的方法

    在项目开发中我们经常会遇到需要更改input单选和多选样式的情况,今天就给大家介绍一种简单改变input单选和多选样式的办法. 在这之前先简单介绍一下:before伪类 :before 选择器向选定的 ...

  6. android单选对话框代码,Android实现单选与多选对话框的代码

    android开发中实现单选与多选对话框的代码非常简单,具体代码如下所示: public void myClick(View view) { // 单选对话框 //singleCheckDialog( ...

  7. list多选 android,Android ExpandableListView单选以及多选实现代码

    一.概述 ExpandableListView是常用的一个控件,今天自己做了个小练习,主要需求是单选以及多选的实现,看似比较简单,但是还是比较复杂,把代码贴给大家,有这种需求的可以参考一下. 二.效果 ...

  8. iOS-按钮单选与多选逻辑处理

    概述 循环创建按钮, 进行按钮单选或者多选的操作. 详细 代码下载:http://www.demodashi.com/demo/10712.html 我们经常会有多行多列按钮的页面, 这个时候我们通常 ...

  9. 代码分析-DataGrid实现自增列、单选、多选

    上一次,我们为这个DataGrid实现了添加.删除.修改.分页.动态修改内容等功能,今天再来分析一下如何为之添加自增列.单选.多选的功能. 首先看一下需要在上次的基础上增加的代码: (1)实现自增列 ...

最新文章

  1. python和c++哪个好找工作-升学为主的编程学python和C++哪个好?
  2. CHIL-SQL-PRIMARY KEY 约束
  3. Python-DDT框架
  4. 一句命令行检查cpu个数
  5. 【Java】日期字符串转换java.sql.Date对象
  6. k8s创建Deployment报错:no matches for kind “Deployment“ in version “extensions/v1beta1“
  7. 得推B2B2C商城源码v4.1
  8. Zookeeper(三)——选举机制
  9. 快速软件开发 学习笔记 之六
  10. 前端实习日记——高新兴科技集团
  11. [sql]join的5种方式:inner join、left(outer) join、right (outer) Join、full(outer) join、cross join...
  12. C# webclient UploadStringAsync如何得到变量?
  13. 【C语言】浅谈C语言数组%c%s打印逻辑及数组打印单个汉字
  14. QListView自定义Item
  15. 正则表达式常用的校验方法
  16. 网站提示HTTP503Service Unavailable的处理办法
  17. Task 3: Subword Models
  18. latex表格中如何画虚线
  19. idea html设置字体大小,intellij idea设置(字体大小、背景)
  20. APIAuto——敏捷开发最强大易用的 HTTP 接口工具 (二)

热门文章

  1. windows系统修改cmd窗口编码格式
  2. C/C++头文件一览表
  3. vasp 5.2编译方法
  4. 【Android 修炼手册系列内容】
  5. 为什么各大银行一直在不遗余力推广信用卡呢?
  6. mysql中as用法
  7. 愿你白天有说有笑,晚上睡个好觉
  8. 我的博客今天6岁298天了,我领取了元老博主徽章
  9. 温柔得叫人想死:日本电影《火宅之人》手记
  10. qt中如何模拟按钮点击_qt – 在Windows中模拟鼠标按钮单击