这段代码为了使用 TreeNodeCheckChanged 事件,会有回刷新的效果;

不喜欢的可查看改进版,利用js控制选择操作,无界面刷新, “http://www.cnblogs.com/GoCircle/p/6231985.html”

前台代码

    <style>
.tn td {
height: 18px;
display: flex;
} .tn tr {
display: flex;
} .tn a {
line-height: 18px;
}
</style>
<script type="text/javascript">
function postBackByObject() {
var o = window.event.srcElement;
if (o.type === "checkbox") {
//第一个参数写up_action的ID,否则就是整个页面刷了
__doPostBack("up_action", "");
}
}
</script> <asp:UpdatePanel ID="up_action" runat="server">
<ContentTemplate>
<asp:TreeView ID="tv_roleaction" runat="server" ShowCheckBoxes="All" CssClass="tn" OnTreeNodeCheckChanged="tv_roleaction_TreeNodeCheckChanged" ShowLines="True" CollapseImageToolTip="折叠">
</asp:TreeView>
</ContentTemplate>
</asp:UpdatePanel>

后台

注:由于页面加载问题,请在关闭或保存页面信息后重新new一下两个私有变量

        private static SysRoleEntity role = new SysRoleEntity();

        private static List<object> roleaction = new List<object>();

        protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//调用递归函数,完成树形结构的生成
AddTree(, (TreeNode)null);
tv_roleaction.Attributes.Add("onclick", "postBackByObject()");
}
} //递归添加树的节点
public void AddTree(int ParentID, TreeNode pNode)
{
DataView dvTree = new DataView(SysActionBLL.GetInstance().GetList(""));
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[FPARENTACTIONID] = " + ParentID; foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
Node.Value = Row["FACTIONID"].ToString();
Node.Expanded = true;
if (pNode == null)
{ //添加根节点
Node.Text = "<font style='color:gray'>" + Row["FACTIONNAME"].ToString() + "</font>";
tv_roleaction.Nodes.Add(Node);
}
else
{ //̀添加当前节点的子节点
Node.Text = "<font style='color:gray'>" + Row["FACTIONNAME"].ToString() + "</font>";
pNode.ChildNodes.Add(Node);
} //判断当前角色是否拥有该权限
if (roleaction.Count > && roleaction.Find(p => p.ToString() == Row["FACTIONID"].ToString()) != null)
{
Node.Checked = true;
Node.Text = Regex.Replace(Node.Text, @"gray", @"green");
}
AddTree(Int32.Parse(Row["FACTIONID"].ToString()), Node); //再次递归
}
} /// <summary>
/// 节点的选中事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void tv_roleaction_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
{
//设置该节点的属性 变量roleaction的修改
if (e.Node.Checked)
{
roleaction.Add(e.Node.Value);
e.Node.Text = Regex.Replace(e.Node.Text, @"gray", @"green");
}
else
{
roleaction.Remove(e.Node.Value);
e.Node.Text = Regex.Replace(e.Node.Text, @"green", @"gray");
} SetChildChecked(e.Node);
SetParentChecked(e.Node);
} //设置该结点的子节点
private void SetChildChecked(TreeNode parentNode)
{
foreach (TreeNode node in parentNode.ChildNodes)
{
//子节点是否选并改变颜色
node.Checked = parentNode.Checked;
if (node.Checked)
{
roleaction.Add(node.Value);
node.Text = Regex.Replace(node.Text, @"gray", @"green");
}
else
{
roleaction.Remove(node.Value);
node.Text = Regex.Replace(node.Text, @"green", @"gray");
} if (node.ChildNodes.Count > )
{
SetChildChecked(node);
}
}
} //设置该结点的父节点
private void SetParentChecked(TreeNode childNode)
{
if (childNode.Parent != null)
{
var ifnochecked = true;
//检查父节点下是否有选中的节点
foreach (TreeNode node in childNode.Parent.ChildNodes)
{
if (node.Checked)
{
if (roleaction.Where(p => p.ToString().Equals(childNode.Parent.Value)).Count() == )
{
roleaction.Add(childNode.Parent.Value);
}
ifnochecked = false;
childNode.Parent.Checked = true;
childNode.Parent.Text = Regex.Replace(childNode.Parent.Text, @"gray", @"green");
break;
}
}
if (ifnochecked)
{
roleaction.Remove(childNode.Parent.Value);
childNode.Parent.Checked = false;
childNode.Parent.Text = Regex.Replace(childNode.Parent.Text, @"green", @"gray");
}
SetParentChecked(childNode.Parent);
}
}

asp 使用TreeView控件的更多相关文章

  1. ASP.NET - TreeView控件,只操作最后一级节点

    效果: 使用母板页进行,左右页面进行跳转. 绑定TreeView控件:http://www.cnblogs.com/KTblog/p/4792302.html 主要功能: 点击节点的时候,只操作最后一 ...

  2. asp.net TreeView控件绑定数据库显示信息

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  3. 脚本全选全不选操作asp.net treeview控件

    //树节点勾选(取消)上级自动全部勾选(取消)下级,勾选下级自动勾选上级,取消全部下级,自动取消上级 //事件响应函数 var HandleCheckbox = function () { //取得事 ...

  4. asp.net treeview控件无刷新选择和删除节点的ajax方法

    转载 http://blog.csdn.net/luq885/article/details/1621681 如果节点被选择的话,节点所在的td的class属性就会被设置为TreeView1_1.   ...

  5. asp TreeView控件的使用

    相对于之前发过一个TreeView控件的使用方法 本次利用js操作,页面无刷新,性能提高 Css编码可能时我的模板页样式被继承下来,导致页面变乱,不需要的可以去掉 前台 <style> . ...

  6. 【ASP.NET 进阶】TreeView控件学习

    这几天上班没事做,也不好打酱油,学点没接触过的新东西吧,基本了解了下TreeView控件. TreeView 控件用于在树结构中显示分层数据,例如目录或文件目录等. 下面看代码吧: 1.效果图 2.静 ...

  7. TreeView控件例子

    XmL文件代码: <?xml version="1.0" encoding="utf-8" ?> <Area> <Province ...

  8. TreeView控件绑定数据库

    1.在设计视图里面的代码 <form id="form1" runat="server"> <div> <h1>两个表< ...

  9. asp.net分页控件

    一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Reg ...

随机推荐

  1. Ubuntu下安装Docker

    1. 安装前先检查系统对docker的支持,尽可能安装高版本的系统,比如Ubuntu14.04等,安装前可以先检查系统信息. Docker需要64位机器,需要运行在3.8以上的内核上,需要操作系统支持 ...

  2. Android 短信广播接收相关问题

    本人是Android新手,最近做了一个关于监听手机短信功能的应用,我在网上看资料了解到广播分为有序广播和无序广播,有序广播:无序广播又称普通广播,其中的利弊我也一时没搞清楚,我用的是有序广播实现的,具 ...

  3. spring 属性注入

    Spring的核心技术室依赖注入,下面是依赖注入之属性注入的实现过程,牛刀小试,请看效果. 1.首先添加Spring.Web引用.本例中是使用分层思想来演示的,下面是项目的结构和UserModel类的 ...

  4. delphi实现的RTMP播放

    其实知道原理用什么语言实现都是可以的 1. 服务器 提供http服务, 点击start运行. 2. 测试客户端 定时获取http服务的数据, 坐标是服务器中写死的, 在中国地图中画了一个圈. 如: { ...

  5. WPF、Sivelright、UWP

    Sivelright:  http://www.cnblogs.com/webabcd/category/106371.html UWP 律师查询 MVVM WPF入门教程系列一——基础 WPF入门教 ...

  6. Dynamics AX 2012 R2 业务系列-采购业务流程

    在博文Dynamics AX R2 业务系列中,Reinhard对这个系列做了一个规划,下面我们就按照规划开始说业务吧. 国际惯例,从采购开始. 1.采购的主要职责 简单点说,采购的主要职责,是从供应 ...

  7. gulp编译sass

    前言:前段时间学习了sass语法,但是一直用的是"考拉"这个软件工具将我写的sass代码编译成css,然后再引用到项目里面去的,随着对sass的更加深入的了解,我开始尝试着将sas ...

  8. 安装tomcat

    一.JDK1.7安装 1.下载jdk,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u1-download-513 ...

  9. 后端学 Angular 2 —— 组件间通信

    1. 父组件向子组件传递信息 使用@Input 子组件的属性用 @Input 进行修饰,在父组件的模板中绑定变量 例子: import { Component, OnInit, Input } fro ...

  10. [Linux] vimdiff 快速比较和合并少量文件

    纯文本文件比较和合并工具一直是软件开发过程中比较重要的组成部分,vimdiff 能够在比较出来的多处差异之间快速定位,很容易的进行文件合并操作.在需要快速比较和合并少量文件的时候,vimdiff是很好 ...