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(0, (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 > 0 && 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 > 0){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() == 0){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);}}
转载于:https://www.cnblogs.com/GoCircle/p/6203095.html
asp 使用TreeView控件相关推荐
- asp.net treeview 控件父子节点级联选中
一.使用方法 <asp:TreeView ID="MenuTree" runat="server" ShowCheckBoxes="All&qu ...
- ASP.NET TreeView控件各个节点总是居中对齐,而不是左对齐的问题
如图所示:之前父节点和子节点都是居中对齐,看起来很层次感,后来查找问题发现原来是CSS样式的问题. table{ table-layout:fixed; empty-cells:sho ...
- asp.net treeview控件无刷新选择和删除节点的ajax方法
转载 http://blog.csdn.net/luq885/article/details/1621681 如果节点被选择的话,节点所在的td的class属性就会被设置为TreeView1_1. ...
- ASP.NET Web程序设计——TreeView控件
TreeView简介: 各种站点都有导航系统,实现方式是:在页面上放置多个超链接,以达到页面导航的功能. 缺点:超链接分散在多个页面,在站点结构发生变化的情况下,"分散"导航会导致 ...
- 自学Web开发第十四天-基于VB和ASP.NET;丰富数据呈现:TreeView控件的使用及与GridView控件联动,深入研究从GridView中取数据
自学Web开发第十四天-基于VB和ASP.NET:丰富数据呈现:TreeView控件的使用及与GridView控件联动,深入研究从GridView中取数据 GridView操作数据库后,刷新TreeV ...
- asp.NET中 treeview 控件的使用
asp.NET中 treeview 控件的使用 treeview控件实现点击Node,弹出相应WebUserControl画面 所需控件 treeview控件 WebUserControl,web用户 ...
- 数据回发时,维护ASP.NET Tree控件位置
ASP.NET2.0提供了一个功能强大的TreeView控件,但是它看起来有一个缺陷:它好像不能够跟踪用户最后选择的一个节点.如果你滚动到第50个节点然后展开该节点,那么当单击链接页面进行回发后,你必 ...
- WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色
WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色 在B/S开发中,对TreeView控件要改变当前选中节点的颜色比较方便,其有相应的SelectedNodeChanged事件 ...
- TreeView控件
尽管一个典型的树结构只有一个根节点,但 TreeView 控件允许您向树结构中添加多个根节点.当您要显示项目列表,但不显示单个主根节点时(例如在产品类别列表中),这一功能很有用. 每个节点都具有一个 ...
最新文章
- C++的三大特性:封装,继承,多态
- 好用的 Markdown 编辑器 Typora【Window 、Linux 下的安装教程】
- Docker容器中的WildFly Swarm JAX-RS微服务
- linux修改hostname
- mysql 半同步 5.6及5.7
- 【Antlr】识别常见的词法结构
- R语言 神经网络与深度学习(二)
- AWS 之于 K8s,如同 Windows 之于 Linux!
- 程序员面试金典——9.8硬币表示
- 这个是我学习的所有sql语句的写法
- 神经网络的理解和计算
- ajax请求进error怎么弹出错诶信息,在ajax请求jqgrid之后出现错误时显示错误消息...
- 【转】Java集合间的相互转换
- won10qualcomm atheros无线网卡驱动安装不了
- 怎么把QQ音乐里wav格式转换成MP3
- java解压和压缩cab包 附jar
- web页面的性能优化以及SEO
- 最热电气专业论文选题
- EPLAN使用技巧总结
- 如何设置使用电脑默认浏览器打开微信中发的链接
热门文章
- LeetCode(#118)————杨辉三角形
- python编写字符串查找函数_Python 简明教程 --- 8,Python 字符串函数
- 优秀ppt作品范例_首次公开|锐普的内部PPT配色库
- 嵌入式全栈工程师_我花了半个月,整理出了这篇嵌入式开发学习指南(学习路线+知识点梳理)...
- python类和oop基础知识
- php的实体字符表,php htmlspecialchars_decode() 函数把预定义的 HTML 实体转换为字符
- matlab 多项式表达,MATLAB自学笔记(十七):多项式及其函数
- java判_java中判空
- html代码在线分析,网站html代码解析
- 关于计算机网络的描述错误的是,【单选题】以下关于计算机网络定义的描述中,错误的是...