在“会飞的鱼”博客中看到GridView实现树形结构的代码,经过修改,添加了树形结构中的复选框功能,欢迎吐槽。

源地址:http://www.cnblogs.com/chhuic/archive/2012/05/11/2495577.html

  1. <script type="text/javascript">
  2. //树节点相关控制
  3. <!--
  4. function hideChildren(node) {
  5. var level = parseInt(node.getAttribute("level"));
  6. var nextNode = node.nextSibling;
  7. while (nextNode != null && parseInt(nextNode.getAttribute("level")) > level) {
  8. nextNode.style.display = "none"; nextNode = nextNode.nextSibling;
  9. }
  10. }
  11. function showChildren(node) {
  12. var level = parseInt(node.getAttribute("level"));
  13. var id = node.getAttribute("id");
  14. var nextNode = node.nextSibling;
  15. while (nextNode != null && parseInt(nextNode.getAttribute("level")) > level) {
  16. if (nextNode.getAttribute("pid") == id) {
  17. if (node.getAttribute("expand") == "1") {
  18. nextNode.style.display = "";
  19. showChildren(nextNode);
  20. }
  21. else {
  22. nextNode.style.display = "none";
  23. }
  24. }
  25. nextNode = nextNode.nextSibling;
  26. }
  27. }
  28. function setExpand(sender) {
  29. var curNode = sender.parentNode.parentNode;
  30. if (curNode.getAttribute("expand") == "1") {
  31. curNode.setAttribute("expand", "0");
  32. sender.src = "../../Common/Images/Down.gif";
  33. hideChildren(curNode);
  34. }
  35. else {
  36. curNode.setAttribute("expand", "1");
  37. sender.src = "../../Common/Images/Top.gif";
  38. showChildren(curNode);
  39. }
  40. }
  41. function setCheck(sender){
  42. var curNode = sender.parentNode.parentNode;
  43. if (curNode.getAttribute("expand") == "1") {
  44. var level = parseInt(curNode.getAttribute("level"));
  45. var nextNode = curNode.nextSibling;
  46. while (nextNode != null && parseInt(nextNode.getAttribute("level")) > level) {
  47.  
  48. var a=nextNode.firstChild.firstChild;
  49. a.checked = sender.checked;
  50. nextNode = nextNode.nextSibling;
  51. }
  52.  
  53. }
  54. }
  55. //-->
  56. </script>

Script Code

  1. <asp:GridView ID="gvList" runat="server" AutoGenerateColumns="False" CssClass="datatbl"
  2. Style="width: 900px" DataKeyNames="ID,PID,Level,HasChild,processName,process,content" TreeColumnIndex="0"
  3. OnRowDataBound="gvList_RowDataBound">
  4. <Columns>
  5. <asp:TemplateField HeaderText="检查编号">
  6. <ItemTemplate>
  7. <asp:CheckBox ID="cboProcess" onclick="setCheck(this)" runat="server" />
  8. <asp:Label ID="Label1" runat="server" Text='<%# Bind("process") %>'></asp:Label>
  9. </ItemTemplate>
  10. <HeaderStyle Width="200px" />
  11. </asp:TemplateField>
  12. <asp:BoundField HeaderText="检查内容" DataField="content">
  13. <HeaderStyle Width="700px" />
  14. </asp:BoundField>
  15. <asp:BoundField DataField="level" HeaderText="level" Visible="False" />
  16. </Columns>
  17. <EmptyDataTemplate>
  18. <div class="tip">
  19. 暂无记录!</div>
  20. </EmptyDataTemplate>
  21. <HeaderStyle HorizontalAlign="Center" CssClass="head"></HeaderStyle>
  22. <PagerStyle HorizontalAlign="Right"></PagerStyle>
  23. <AlternatingRowStyle CssClass="alter"></AlternatingRowStyle>
  24. <RowStyle CssClass="item"></RowStyle>
  25. </asp:GridView>

HTML Code

  1. protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
  2. {
  3. if (e.Row.RowType == DataControlRowType.DataRow)
  4. {
  5. # region 生成树形结构
  6. string id = gvList.DataKeys[e.Row.RowIndex]["ID"].ToString();
  7. string pid = gvList.DataKeys[e.Row.RowIndex]["PID"].ToString();
  8. string level = gvList.DataKeys[e.Row.RowIndex]["Level"].ToString();
  9. string checkNo = gvList.DataKeys[e.Row.RowIndex]["process"].ToString();
  10.  
  11. //增加节点的属性
  12. e.Row.Attributes.Add("id", id);
  13. e.Row.Attributes.Add("pid", pid);
  14. e.Row.Attributes.Add("level", level);
  15. e.Row.Attributes.Add("expand", "");
  16. int indent = (int.Parse(level) - ) * ;
  17. //判断是否有子节点
  18. if (gvList.DataKeys[e.Row.RowIndex]["HasChild"].ToString() == "")
  19. {
  20. //设置父节点前面的图片和点击事件
  21. HtmlImage img = new HtmlImage();
  22. img.Src = "../../Common/Images/Top.gif";
  23. img.Attributes.Add("onclick", "setExpand(this)");
  24. img.Style.Add("cursor", "pointer");
  25. e.Row.Cells[].Controls.AddAt(, img);
  26. e.Row.Cells[].Style["font-weight"] = "bold";
  27. indent += ;
  28. }
  29. else
  30. {
  31. indent += ;
  32. }
  33.  
  34. e.Row.Cells[].Style["padding-left"] = indent + "px";
  35. e.Row.Cells[].Controls.Add(new LiteralControl(e.Row.Cells[].Text));
  36. # endregion
  37. e.Row.Attributes["onmouseover"] = "style.backgroundColor='#F2FDDB'";
  38. e.Row.Attributes["onmouseout"] = "style.backgroundColor=''";
  39. }
  40.  
  41. }

C# Code

GridView 树形结构分组的功能的更多相关文章

  1. 在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组)

    原文:在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必 ...

  2. Extjs实现树形结构三连选

    当项目中需要一个部门人员选择或者省市县地域连选时,就需要树形结构的连选. 再此,写了一个简单的树形结构三连选功能,模拟从后台读取数据和处理数据(欢迎大家交流指正). 代码如下: 循环创建三棵树,其中只 ...

  3. 「SQL归纳」树形结构表的存储与查询功能的实现——通过路径方法(非递归)

    一.树形结构例子分析: 以360问答页面为例:http://wenda.so.com/c/ 我们通过观察URL,可以明确该页面的数据以树形结构存储,下面三块模块分别为: ①根节点 ②根节点的第一层子节 ...

  4. VBA读取文件夹下所有文件夹及文件内容,并以树形结构展示

    Const TR_LEVEL_MARK = "+"Const TR_COL_INDEX = "A"Const TR_COL_LEVEL = "E&qu ...

  5. 树形结构的数据库表Schema设计-基于左右值编码

    树形结构的数据库表Schema设计 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需要借助于数据库完 成持久化.然而目前的 ...

  6. Atitit.各种 数据类型 ( 树形结构,表形数据 ) 的结构与存储数据库 attilax 总结

    Atitit.各种  数据类型 ( 树形结构,表形数据  ) 的结构与存储数据库 attilax  总结 1. 数据结构( 树形结构,表形数据,对象结构 ) 1 2. 编程语言中对应的数据结构 jav ...

  7. 使用ztree.js,受益一生,十分钟学会使用tree树形结构插件

    看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做 ...

  8. 部门树形结构,使用Treeview控件显示部门

    部门树形结构.设计张部门表用于存储部门编码.名称.上级部门id,使用Treeview控件显示部门树,并实现部门增删改.移动.折叠等功能.特别提示,部门有层级关系,可用donetbar的adtree控件 ...

  9. jQuery+zTree加载树形结构菜单

    jQuery+zTree加载树形结构菜单 由于项目中需要设计树形菜单功能,经过一番捣腾之后,终于给弄出来了,所以便记下来,也算是学习zTree的一个总结吧. zTree的介绍: 1.zTree 是利用 ...

随机推荐

  1. Entity Framework 6 Recipes 2nd Edition(11-11)译 -> 在LINQ中调用数据库函数

    11-11. 在LINQ中调用数据库函数 问题 相要在一个LINQ 查询中调用数据库函数. 解决方案 假设有一个任命(Appointment )实体模型,如Figure 11-11.所示, 我们想要查 ...

  2. dhcp协议交互报文

    DHCP共有八种报文,分别为DHCP Discover.DHCP Offer.DHCP Request.DHCP ACK.DHCP NAK.DHCP Release.DHCP Decline.DHCP ...

  3. Struts2拦截器的执行过程浅析

    在学习Struts2的过程中对拦截器和动作类的执行过程一度陷入误区,特别读了一下Struts2的源码,将自己的收获分享给正在困惑的童鞋... 开始先上图: 从Struts2的图可以看出当浏览器发出请求 ...

  4. 解析大型.NET ERP系统 高质量.NET代码设计模式

    1 缓存 Cache 系统中大量的用到缓存设计模式,对系统登入之后不变的数据进行缓存,不从数据库中直接读取.耗费一些内存,相比从SQL Server中再次读取数据要划算得多.缓存的基本设计模式参考下面 ...

  5. MVC5 网站开发之五 展示层架构

    展示层由Ninesky.Web项目实现,负责网站内容的显示,项目包含Member和Control两个区域.   目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项 ...

  6. ORACLE快速彻底Kill掉的会话

    在ORACLE数据库当中,有时候会使用ALTER SYSTEM KILL SESSION 'sid,serial#'杀掉一个会话进程,但是使用这个SQL语句杀掉会话后,数据库并不会立即释放掉相关的资源 ...

  7. 自己动手,实现一种类似List<T>的数据结构(一)

    前言 上一篇文章<Unity3D中常用的数据结构总结与分析>简单总结了一下小匹夫工作中经常遇到的一些数据结构.不过小匹夫一直有种观点,就是光说的热闹实际啥也不做真的没啥意思.光说不练假把式 ...

  8. Java进击C#——应用开发之WinForm开发

    本章简言 上一章笔者介绍了关于WinForm环境.这一章笔者将继续讲WinForm.只不过更加的面向开发了.事实就是在学习工具箱里面的控件.对于WinForm开发来讲,企业对他的要求并没有那么高.但是 ...

  9. electron之Windows下使用 html js css 开发桌面应用程序

    1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...

  10. 【WP8.1】WebView笔记

    之前在WP8的时候做过WebBrowser相关的笔记,在WP8.1的WebView和WebBrowser有些不一样,在这里做一些笔记 下面分为几个部分 1.禁止缩放 2.JS通知后台C#代码(noti ...