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 ...
随机推荐
- PeopleSoft Home Subdirectories
PeopleSoft Home Subdirectories appserv — home to the Application Server and Process Scheduler Server ...
- hdu 1004 Let the Balloon Rise
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- 家长-Parents表增加字段Token,Gender,Email,Portrait
家长-Parents表增加字段Token,Gender,Email,Portrait ) ) ) )
- 【转】安装mysql 出现:Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
来源:http://blog.csdn.net/dapeng0112/article/details/37053407 本来初始化配置是这样的: scripts/mysql_install_db -- ...
- .NET开发者必备的工具箱
本文作者Spencer是一名专注于ASP.NET和C#的程序员,他列举了平时工作.在家所使用的大部分开发工具,其中大部分工具都是集中于开发,当然也有一些其它用途的,比如图片处理.文件压缩等. 如果你是 ...
- logrotate
logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用.可以节省磁盘空间. logrotate命令格式:logrot ...
- cmd常用命令符
想成为电脑高手必须掌握的八个cmd 命令 http://www.cr173.com/html/3917_1.html ping命令的其他技巧:在一般情况下还可以通过ping对方让对方返回给你的TTL值 ...
- FFmpeg相关资料
编译: http://www.jianshu.com/p/147c03553e63 http://www.cocoachina.com/ios/20150514/11827.html http://c ...
- 阿里yum源
转:http://mirrors.aliyun.com/help/centos?spm=5176.bbsr150321.0.0.d6ykiD 1.备份 mv /etc/yum.repos.d/Cent ...
- header中Content-Disposition的作用
在servlet3.0中 支持文件上传的注解@MultipartConfig 发现有个例子开头打印的信息中有Content-Disposition,一时好奇,所以了解了一下.顺便学习一下文件上传所需要 ...