这段代码为了使用 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控件相关推荐

  1. asp.net treeview 控件父子节点级联选中

    一.使用方法 <asp:TreeView ID="MenuTree" runat="server" ShowCheckBoxes="All&qu ...

  2. ASP.NET TreeView控件各个节点总是居中对齐,而不是左对齐的问题

    如图所示:之前父节点和子节点都是居中对齐,看起来很层次感,后来查找问题发现原来是CSS样式的问题. table{     table-layout:fixed;     empty-cells:sho ...

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

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

  4. ASP.NET Web程序设计——TreeView控件

    TreeView简介: 各种站点都有导航系统,实现方式是:在页面上放置多个超链接,以达到页面导航的功能. 缺点:超链接分散在多个页面,在站点结构发生变化的情况下,"分散"导航会导致 ...

  5. 自学Web开发第十四天-基于VB和ASP.NET;丰富数据呈现:TreeView控件的使用及与GridView控件联动,深入研究从GridView中取数据

    自学Web开发第十四天-基于VB和ASP.NET:丰富数据呈现:TreeView控件的使用及与GridView控件联动,深入研究从GridView中取数据 GridView操作数据库后,刷新TreeV ...

  6. asp.NET中 treeview 控件的使用

    asp.NET中 treeview 控件的使用 treeview控件实现点击Node,弹出相应WebUserControl画面 所需控件 treeview控件 WebUserControl,web用户 ...

  7. 数据回发时,维护ASP.NET Tree控件位置

    ASP.NET2.0提供了一个功能强大的TreeView控件,但是它看起来有一个缺陷:它好像不能够跟踪用户最后选择的一个节点.如果你滚动到第50个节点然后展开该节点,那么当单击链接页面进行回发后,你必 ...

  8. WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

    WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色  在B/S开发中,对TreeView控件要改变当前选中节点的颜色比较方便,其有相应的SelectedNodeChanged事件 ...

  9. TreeView控件

    尽管一个典型的树结构只有一个根节点,但 TreeView 控件允许您向树结构中添加多个根节点.当您要显示项目列表,但不显示单个主根节点时(例如在产品类别列表中),这一功能很有用. 每个节点都具有一个 ...

最新文章

  1. C++的三大特性:封装,继承,多态
  2. 好用的 Markdown 编辑器 Typora【Window 、Linux 下的安装教程】
  3. Docker容器中的WildFly Swarm JAX-RS微服务
  4. linux修改hostname
  5. mysql 半同步 5.6及5.7
  6. 【Antlr】识别常见的词法结构
  7. R语言 神经网络与深度学习(二)
  8. AWS 之于 K8s,如同 Windows 之于 Linux!
  9. 程序员面试金典——9.8硬币表示
  10. 这个是我学习的所有sql语句的写法
  11. 神经网络的理解和计算
  12. ajax请求进error怎么弹出错诶信息,在ajax请求jqgrid之后出现错误时显示错误消息...
  13. 【转】Java集合间的相互转换
  14. won10qualcomm atheros无线网卡驱动安装不了
  15. 怎么把QQ音乐里wav格式转换成MP3
  16. java解压和压缩cab包 附jar
  17. web页面的性能优化以及SEO
  18. 最热电气专业论文选题
  19. EPLAN使用技巧总结
  20. 如何设置使用电脑默认浏览器打开微信中发的链接

热门文章

  1. LeetCode(#118)————杨辉三角形
  2. python编写字符串查找函数_Python 简明教程 --- 8,Python 字符串函数
  3. 优秀ppt作品范例_首次公开|锐普的内部PPT配色库
  4. 嵌入式全栈工程师_我花了半个月,整理出了这篇嵌入式开发学习指南(学习路线+知识点梳理)...
  5. python类和oop基础知识
  6. php的实体字符表,php htmlspecialchars_decode() 函数把预定义的 HTML 实体转换为字符
  7. matlab 多项式表达,MATLAB自学笔记(十七):多项式及其函数
  8. java判_java中判空
  9. html代码在线分析,网站html代码解析
  10. 关于计算机网络的描述错误的是,【单选题】以下关于计算机网络定义的描述中,错误的是...