TreeView 实现单选与多选!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Skype for Business Server 2015-08-反向代理-发布-统一沟通

申明&#xff1a;文章中部分内容有涉及官方帮助或者网上资源整合&#xff0c;如有违权&#xff0c;请速与作者联系&#xff0c;谢谢&#xff01;作者&#xff1a;316191099qq.com培训&#xff1a;Skype for Business Server 2015-项目实战-培训-QQ群:65235615。&#xff08;学员…

架构师小跟班:如何高效又安全的清理Linux服务器上的缓存?

操作服务器上的生产环境&#xff0c;一定要慎之又慎&#xff0c;安全第一&#xff0c;优化第二&#xff01; 一些基本原理 说到清理内存&#xff0c;那么不得不提到/proc这一个虚拟文件系统&#xff0c;这里面的数据和文件都是内存中的实时数据&#xff0c;很多参数的获取都可以…

解题报告 Diamonds

1. 题目 diamonds 题目描述 小keke同学非常喜欢玩俄罗斯方块&#xff08;*^*&#xff09;,他最近发现传统的俄罗斯方块很无趣&#xff0c;于是他想到了一个新规则的游戏来恶心你&#xff08;……&#xff0c;没素质啊&#xff09;。 游戏是这样的&#xff1a; 给定你一个宽度为…

LeetCode—233. 数字 1 的个数(困难)

233. 数字 1 的个数&#xff08;困难&#xff09; 题目描述&#xff1a; 给定一个整数 n&#xff0c;计算所有小于等于 n 的非负整数中数字 1 出现的个数。 考察重点&#xff1a;分别计算个、十、百…千位上1出现的次数&#xff0c;再求和。 func countDigitOne(n int) int…

趣味教程:从女娲造人谈类、属性、方法及实例

前言:相信大家都听说过女娲造人的故事&#xff0c;不过细节可能不会太清楚&#xff0c;我现在略述如下&#xff0c;您可要仔细听哦&#xff0c;这和我们今天要聊的主题有莫大的关系呀。 女娲是一个人身龙尾的女神。盘古开天辟地以后&#xff0c;也就在天地间到处游历。她虽然是…

JavaScript--fullPage.js插件

GitHub:https://github.com/alvarotrigo/fullPage.js FullPage.js是一个基于JQuery的插件,可以很方便的制作出全屏网站; 一 特点: 1.支持鼠标滚动;2.支持键盘控制前进和后退;3.多个回调函数;4.支持手机/平板触摸事件;5.支持CSS3动画;6.支持窗口缩放,缩放时自动调整;7.jQuery兼…

细细讲述Java技术开发的那些不为人知的规则

本文介绍的Java规则的说明分为3个主要级别&#xff0c;中级是平时开发用的比较多的级别&#xff0c;在今后将陆续写出其他的规则。遵守了这些规则可以提高程序的效率、使代码又更好的可读性等。 一、在finally方法里关掉input或者output资源 方法体里面定义了input或者output流…

SQL Server 获取所有表和数据的批量操作

最近要写触发器&#xff0c;对数据库中每个用户表都要写&#xff0c;一查170多个表&#xff0c;晕了~&#xff0c;想偷懒自制程序完成这些一些批量的操作&#xff0c;所以搜集了一下对数据库其他操作的东东&#xff01; --一时兴起&#xff0c;随处搜集 1、创建数据库 CREATE D…

创业,程序员心中说不出的痛

一个从事IT行业5年以上的人&#xff0c;你问他有没有想过自己创业&#xff0c;他说没有&#xff0c;那95&#xff05;的可能是假的。不过&#xff0c;我属于那剩下5&#xff05;里面的其中一个。也许是受我父亲的影响&#xff0c;从小我就潜移默化的受到这样的教育&#xff1a;…

LeetCode—301. 删除无效的括号(困难)

301. 删除无效的括号&#xff08;困难&#xff09; 题目描述&#xff1a; 给你一个由若干括号和字母组成的字符串 s &#xff0c;删除最小数量的无效括号&#xff0c;使得输入的字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。 考察重点&#xff1a;题目要求找…

Failed to issue method call: Unit mysql.service failed to load: No such file or directory解决的方式...

Failed to issue method call: Unit mysql.service failed to load: No such file or directory解决的方式作者&#xff1a;chszs。转载需注明。博客主页&#xff1a;http://blog.csdn.net/chszs1、软件环境&#xff1a;OpenSUSE 13.1 x64MySQL 5.6.20 x642、採用RPM包安装MySQ…

进销存和财务方面业务知识了解

最近由于工作的需要&#xff0c;需要了解进销存的业务&#xff0c;还有财务方面的一些知识&#xff0c;需要对业务有很好的把握能力&#xff0c;再接再励&#xff0c;加油看书&#xff0c;学习了哦&#xff0c;并且还有理论结合实际来了解&#xff0c; Busying Now.转载于:http…

训练(线段树+树状数组) poj——3264

这个题应该算是比较简单的线段树问题吧&#xff0c;还可以用RMQ做&#xff0c;不过现在还不太熟悉就用线段树做了&#xff0c;直接附代码了&#xff01; #include <stdio.h>#define M 50000#define OX 0x7fffffffstruct node{int r,l;int Max,Min;};node elem[4*M50];int…

LeetCode—56. 合并区间

56. 合并区间 题目描述&#xff1a; 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 考察重点&#x…

在asp.net中实现回车替代Tab键

通常在网页中添加大量内容时&#xff0c;为了便捷&#xff0c;需要实现回车替代Tab键&#xff0c;按照次序填写内容&#xff0e;由于在asp.net中fouce函数中有功能&#xff0c;既控件聚焦&#xff0e;但是如果要实现回车替代Tab键还得需要脚本语言来实现&#xff0e;其实原理很…

POJ3006-Dirichlet's Theorem on Arithmetic Progressions

素数打表&#xff0c;水题。 #include<stdio.h> #include<string.h> const int Max1000001; bool isprime[Max]; int main(void) {int i,j,a,d,n;memset(isprime,true,sizeof(isprime));for(i3;i<1000;i2)for(j3;j<Max/i;j2)if(isprime[i])isprime[i*j]false…

[转]软件测试的完整分类

[转]软件测试的完整分类 2015-06-09 转自&#xff1a;软件测试的完整分类 转载于:https://www.cnblogs.com/Ming8006/p/4563994.html

LeetCode—304. 二维区域和检索 - 矩阵不可变

304. 二维区域和检索 - 矩阵不可变 题目描述&#xff1a; 给定一个二维矩阵 matrix&#xff0c;以下类型的多个请求&#xff1a; 计算其子矩形范围内元素的总和&#xff0c;该子矩阵的 左上角 为 (row1, col1) &#xff0c;右下角 为 (row2, col2) 。 实现 NumMatrix 类&…

ubuntu下的各种环境变量

如想将一个路径加入到$PATH中&#xff0c;可以像下面这样做&#xff1a; 1. 控制台中&#xff1a; $ PATH"$PATH:/my_new_path" &#xff08;关闭shell&#xff0c;会还原PATH&#xff09;2. 修改profile文件&#xff1a; $ vi /etc/profile 在里面加入: export PATH…

采用HttpModules来重写URLs(原理篇)转

据说通过HttpModules可以将类似于&#xff1a;http://www.infotouch.cn/detail.aspx?id120 的URL地址重写为&#xff1a;http://www.infotouch.cn/detail/120.aspx 。这样最直接的好处就是可以让搜索引擎搜索到页面&#xff0c;因为搜索引擎对&#xff1f;之后的参数不太理睬。…