asp 使用TreeView控件
这段代码为了使用 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控件的更多相关文章
- ASP.NET - TreeView控件,只操作最后一级节点
效果: 使用母板页进行,左右页面进行跳转. 绑定TreeView控件:http://www.cnblogs.com/KTblog/p/4792302.html 主要功能: 点击节点的时候,只操作最后一 ...
- asp.net TreeView控件绑定数据库显示信息
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 脚本全选全不选操作asp.net treeview控件
//树节点勾选(取消)上级自动全部勾选(取消)下级,勾选下级自动勾选上级,取消全部下级,自动取消上级 //事件响应函数 var HandleCheckbox = function () { //取得事 ...
- asp.net treeview控件无刷新选择和删除节点的ajax方法
转载 http://blog.csdn.net/luq885/article/details/1621681 如果节点被选择的话,节点所在的td的class属性就会被设置为TreeView1_1. ...
- asp TreeView控件的使用
相对于之前发过一个TreeView控件的使用方法 本次利用js操作,页面无刷新,性能提高 Css编码可能时我的模板页样式被继承下来,导致页面变乱,不需要的可以去掉 前台 <style> . ...
- 【ASP.NET 进阶】TreeView控件学习
这几天上班没事做,也不好打酱油,学点没接触过的新东西吧,基本了解了下TreeView控件. TreeView 控件用于在树结构中显示分层数据,例如目录或文件目录等. 下面看代码吧: 1.效果图 2.静 ...
- TreeView控件例子
XmL文件代码: <?xml version="1.0" encoding="utf-8" ?> <Area> <Province ...
- TreeView控件绑定数据库
1.在设计视图里面的代码 <form id="form1" runat="server"> <div> <h1>两个表< ...
- asp.net分页控件
一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Reg ...
随机推荐
- nodejs与模块soap的用法
最近做了点东西要求用到soap模块,我是怎么知道的呢,收到了 <soap:Body><soap:Fault><faultcode>soap:Client</f ...
- sklearn 增量学习 数据量大
问题 实际处理和解决机器学习问题过程中,我们会遇到一些"大数据"问题,比如有上百万条数据,上千上万维特征,此时数据存储已经达到10G这种级别.这种情况下,如果还是直接使用传统的方式 ...
- WBS功能分解
WBS功能分解表格如下: 功能 子功能 二级子功能 预计花费时间 (小时) 实际花费时间(小时) 地图显示跑道 制作地图 获得开发权限key 1 2 将sdk导入程序 0.5 1 调试程序 1 2 ...
- (三)SQL入门 数据库规格化简介
什么是数据库的规格化呢,说白了就是为了去除数据库冗余.为了数据库更加容易管理而将大表按照逻辑划分为小表的过程. 什么是数据库的去规格化呢,就是规格化的反面.那么你可能就会问,既然上面说了数据库的规格化 ...
- AppCan开发者资料分享(定期更新)
开发者培训 上海20150925开发者培训资料:链接:http://pan.baidu.com/s/1mgCLzz6 密码:mqgi 版权声明:本文为博主原创文章,未经博主允许不得转载.
- uexQQ插件学习心得
uexQQ插件学习心得 uexQQ插件的作用:通过qq可以分享图文,音乐,应用到相应的qq空间.支持手机客户端分享和手机webQQ分享.下面我们就来看一看他的一些方法. 我们先说一下分享的步骤,这个步 ...
- linux虚拟机上不了网--桥接方式--问题一直未解决
转载的:可是自己的虚拟机就是上不了网,无线网卡该配的也配了还是不行,如果真有台物理机器就行了,省了好多事:但是模拟性能时肯定不行了:有人知道是什么原因不? 虚拟机网络模式 无论是vmware,virt ...
- nfc相关
nfc普通读卡写卡按厂商API操作即可,但是牵扯到NDEF的读写就另当别论了,算是二次开放了,android手机有成熟的接口,.net也有一些,github上有一个,还没研究, https://git ...
- Linux中的命令 make -f 是什么意思
出处:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c422460 ...
- vs快捷键大全
前言 作为一个.net开发员,你还在用鼠标去点击相应的操作么?如果你回答是,那么你太low了! 一个很厉害的程序员不会是那种这鼠标到处狂点的人,他们肯定会很多快捷键,所以为了离他们更近一步,我们必须学 ...