这段代码为了使用 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. nodejs与模块soap的用法

    最近做了点东西要求用到soap模块,我是怎么知道的呢,收到了 <soap:Body><soap:Fault><faultcode>soap:Client</f ...

  2. sklearn 增量学习 数据量大

    问题 实际处理和解决机器学习问题过程中,我们会遇到一些"大数据"问题,比如有上百万条数据,上千上万维特征,此时数据存储已经达到10G这种级别.这种情况下,如果还是直接使用传统的方式 ...

  3. WBS功能分解

    WBS功能分解表格如下: 功能 子功能 二级子功能 预计花费时间 (小时) 实际花费时间(小时) 地图显示跑道 制作地图 获得开发权限key 1 2 将sdk导入程序 0.5 1   调试程序 1 2 ...

  4. (三)SQL入门 数据库规格化简介

    什么是数据库的规格化呢,说白了就是为了去除数据库冗余.为了数据库更加容易管理而将大表按照逻辑划分为小表的过程. 什么是数据库的去规格化呢,就是规格化的反面.那么你可能就会问,既然上面说了数据库的规格化 ...

  5. AppCan开发者资料分享(定期更新)

    开发者培训 上海20150925开发者培训资料:链接:http://pan.baidu.com/s/1mgCLzz6 密码:mqgi 版权声明:本文为博主原创文章,未经博主允许不得转载.

  6. uexQQ插件学习心得

    uexQQ插件学习心得 uexQQ插件的作用:通过qq可以分享图文,音乐,应用到相应的qq空间.支持手机客户端分享和手机webQQ分享.下面我们就来看一看他的一些方法. 我们先说一下分享的步骤,这个步 ...

  7. linux虚拟机上不了网--桥接方式--问题一直未解决

    转载的:可是自己的虚拟机就是上不了网,无线网卡该配的也配了还是不行,如果真有台物理机器就行了,省了好多事:但是模拟性能时肯定不行了:有人知道是什么原因不? 虚拟机网络模式 无论是vmware,virt ...

  8. nfc相关

    nfc普通读卡写卡按厂商API操作即可,但是牵扯到NDEF的读写就另当别论了,算是二次开放了,android手机有成熟的接口,.net也有一些,github上有一个,还没研究, https://git ...

  9. Linux中的命令 make -f 是什么意思

    出处:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c422460 ...

  10. vs快捷键大全

    前言 作为一个.net开发员,你还在用鼠标去点击相应的操作么?如果你回答是,那么你太low了! 一个很厉害的程序员不会是那种这鼠标到处狂点的人,他们肯定会很多快捷键,所以为了离他们更近一步,我们必须学 ...