分享:Hierarchy Datagrid 解决方案 (转)

如何实现 Handy Control DataGrid 全选功能 通过以上前端和后端代码的配合,我们成功实现了 Handy Control DataGrid 的全选功能。核心在于利用的头部放置全选复选框,并在其状态改变时,通过事件处理方法更新数据源中每一项的IsSelected属性,从而实现全选和全不选的效果。希望这篇文章能帮助你在项目中轻松实现 DataGrid 的全选功能。如果你有任何疑问或其他需求,欢迎留言讨论。以上公众号文章围绕你提供的代码,详细阐述了如何实现 Handy Control DataGrid 的全选功能,希望对你有所帮助。 阅读详情
DataGrid是非常好用的.net web控件,TreeView也是,但是,尚无一个成熟的控件可以综合两者的优点以表达结构更复杂的数据。

  Denis Bauer提供了一个他称为“Hierarchy Datagrid”的解决方案(http://www.denisbauer.com/ASPNETControls/HierarGrid.aspx),这个方案很好,但需要说明的是

    1、这里实现的“Hierarchy Datagrid”与我们在vb 6中常用的MSHFlexGrid(即Microsoft Hierarchy Flexgrid)的结构并不是一样的。在MSHFlexGrid中,父层的项纵向并排,而子层跟在父层的右边(各层的各列称为一个Band)。而这个实现,子层是在父层的下面像TreeView一样展开,我觉得也许“TreeGrid”这样的名字更合适一些。

    2、这里实现的“Hierarchy Datagrid”基本的思路是,每一层都做成一个User Control,而Denis Bauer的类,则提供了从Page到User Control的一个通用的调用方法。

    3、这个实现一个不好的地方是,比较难以实现Edit的功能。因为父层只向子层传递DataSource,并不纪录子层中的状态,或者说子Datagrid的EditItemIndex。

  SVG兄实现了一个TreeView,它基本像一个DataGrid,但最左一列像TreeView,可以动态的展开。他的思路是用javascript+xmlhttp读取数据,然后用javascript写左边的列。写左边的列的过程,类似于Treeview的htc文件生成列的方法。这个方法的缺点是自己要写的代码比较多,而且修改子层数据的时候,不能利用DataGrid已经实现的功能。

  最近我的一个项目也提出了类似的要求,起初我是用Nested DataGrid做的,但是嵌套的各子层的DataGrid并不属于同一个DataGrid,他们各列之间无法对齐。后来突发奇想,实验了一个方法,成功了。

  其实说穿了一点也不复杂。在msdn的文章“How to Build Tables Dynamically”(http://msdn.microsoft.com/workshop/author/tables/buildtables.asp)中已经介绍,相对于DOM(Document Object Model),以<table>, <tr>, <td>这些来控制Table,还可以利用Table Object Model,直接找到row, cell等,进行增删修改。

  于是,假如我绑定生成这样的表格:
      李 强  天津 天津 数学 80
      李 强  天津 天津 语文 90
      李 强  天津 天津 音乐 70
      李 强  天津 天津 体育 60
      王大明  河北 保定 数学 90
      王大明  河北 保定 语文 80
      陈晓刚  湖南 长沙 数学 90

利用Table Object Model删去重复项,并适当设定重复项中保留下来的那一项的rowspan得值的话,Table中相同的Cell就Merge了。

我的解决方案如下:

1、在.aspx中引用fcnAthosColumnMerge函数

2、在.aspx的<body> tag中声明onload="fcnAthosTableMerge('strMyTableName');"

3、然后声明javascript函数fcnAthosTableMerge(strTableName),其中利用fcnAthosColumnMerge按列对表格进行合并就可以了。

例如上面的表格,可以写作:

function fcnAthosTableMerge(strTableName)
{
fcnAthosHtvgColumnMerge(strTableName, [0], [0, 1, 2], true, true, false);
}

其中[0]表示以第0列(下标从0开始)的值为依据进行合并,[0,1,2]表示若某几行第0列的值相同,则合并其第0,1,和2列。

参数中的三个true/false参数是表示表格是否有Header, Footer和Paging行。

这样上面表格合并后就是
    ———————————————————————
    |            |数学 | 80 |
    | 李 强  天津 天津 |语文 | 90 |
    |            |音乐 | 70 |
    |            |体育 | 60 |
    ———————————————————————
    | 王大明  河北 保定 |数学 | 90 |
    |            |语文 | 80 |
    ———————————————————————
    | 陈晓刚  湖南 长沙 |数学 | 90 |
    ———————————————————————

这样做的好处是,别的部分,完全可以使用datagrid控件。Datagrid产生的table,在浏览器端被merge之后,postback的时候不受任何影响,于是利用datagrid来edit, update, insert数据就很方便了。

另外说明的是,fcnAthosTableMerge函数可以调用fcnAthosColumnMerge多次,但是merge的时候要从右往左的来。

附fcnAthosColumnMerge代码如下:

  function fcnAthosColumnMerge(strGridId, arrIndexCol, arrMergeCol, blHasHeader, blHasFooter, blHasPageLine)
  {
     var tbl = document.all[strGridId];
     var iH = 0;
     var iF = 0;
     
     if(blHasHeader == true) iH++;
     if(blHasFooter == true) iF++;
     if(blHasPageLine == true) iF++;

   tRows = tbl.children[0].children;
   i0 = iH;
   strKey = new Array(arrIndexCol.length);
   strPrevKey = new Array(arrIndexCol.length);
   
   for(ii=0; ii<arrIndexCol.length;ii++)
   {
    strKey[ii] = tRows[iH].children[arrIndexCol[ii]].innerText;
    strPrevKey[ii] = strKey[ii];
   }

   for(i=iH+1;i<tRows.length-iF;i++)
   {
    blEqual = true;
    for(ii=0; ii<arrIndexCol.length;ii++)
    {
     strKey[ii] = tRows[i].children[arrIndexCol[ii]].innerText;
     if(strKey[ii] != strPrevKey[ii]) 
      blEqual = false;
    }

    if(blEqual == false)
    {
     for(ii=0;ii<arrMergeCol.length;ii++)
      tRows[i0].children[arrMergeCol[ii]].rowSpan = i-i0;
     for( j=i0+1; j<i; j++)
      for(ii=arrMergeCol.length-1;ii>=0;ii--)
       tRows[j].children[arrMergeCol[ii]].removeNode(true);
     i0 = i;
     
     for(ii=0;ii<strKey.length;ii++)
      strPrevKey[ii] = strKey[ii];
    }
   }

   for(ii=0;ii<arrMergeCol.length;ii++)   
    tRows[i0].children[arrMergeCol[ii]].rowSpan = i-i0;

   for( j=i0+1; j<i; j++)
    for(ii=arrMergeCol.length-1;ii>=0;ii--)
     tRows[j].children[arrMergeCol[ii]].removeNode(true);

   return;        

  }

Silevrlight GridView多表嵌套 通过设置DataGrid的HierarchyChildTemplate可以实现主从表关系,但是从表结构都是一样的,这里做了一些操作多个不同从表结构的嵌套。 立即下载

相关推荐

easyui tree扁平化扩展,不用再为children嵌套结构烦恼

对easyui tree扁平化扩展,不用再为children嵌套结构烦恼,使用版本1.4.2

分享:Hierarchy Datagrid 解决方案

  DataGrid是非常好用的.net web控件,TreeView也是,但是,尚无一个成熟的控件可以综合两者的优点以表达结构更复杂的数据。  Denis Bauer提供了一个他称为“Hierarchy Datagrid”的解决方案(http://www.denisbauer.com/ASPNETControls/HierarGrid.aspx),这个方案很好,但需要说明的是    1、

athos 1334

ANSYS MAXWELL内置式永磁同步电机(IPMSM)转矩最大时输入电流相位的确定

1.在转子转速为零时看一个周期内的转矩变化

qq_41752507的博客 6518

kendo grid Hierarchy

Hierarchy grid中不能使用下面的这段代码,会造成传值传不过来,把下面的代码注释,不用models,直接用form表单传值就行,暂时没搞明白为什么 //parameterMap: function (options, operation) { // if (operation !== "read" && options.models...

weixin_30315435的博客 140

从SolidWorks到Simscape:URDF导出模型错位的5个常见原因及修复方法

本文深入分析了从SolidWorks导出URDF模型到Simscape时出现模型错位的5个常见原因,包括坐标系定义、RPY角陷阱、轴方向统一、质量属性导出和层次结构错乱,并提供了详细的修复方法和实战技巧,帮助工程师高效解决模型错位问题。

weixin_30664051的博客 443

SAP-PP 返工订单成本归集优化:从物料结算到成本中心的配置与增强实践

本文深入探讨SAP-PP模块中返工订单成本归集的优化方案,重点解析从物料结算到成本中心的配置与增强实践。通过结算参数文件配置、分配结构调整及增强开发实战,解决返工费用误计入物料成本的问题,确保财务核算精准性。文章还提供测试验证方案与常见报错处理技巧,助力企业实现成本数据清晰流向分析。

weixin_29260291的博客 366

WPF 【十月的寒流】学习笔记(3):DataGrid分页

我们这次详细了解一下列表通知的底层是怎么实现的分页是我们最常用的功能,这次简单实现了分页的效果。HandyControl没有提供主动的分页,需要我们组合一下。详细代码可以看我的Github仓库。三种过滤我都写了。

qq_44695769的博客 3888

Ubuntu 22.04 “软件与更新”装了NVIDIA驱动,WiFi等设备不见了

在Win10装了Ubuntu22.04的双系统,台式机里面有NVIDIA 3080Ti的独立显卡,Ubuntu默认使用的nouveau驱动,需要更换成NVIDIA相应的驱动,在软件和更新里面一键安装了NVIDIA-driver-535-server之后,发现wifi、蓝牙等设备消失了。这个问题的根源据说跟这个nouveau驱动有关,希望linux社区可以解决这个问题。命令安装后 sudo reboot就可以重新看到WiFi以及蓝牙等设备图标了。然后用U盘拷贝到不能上网的Ubuntu22.04系统上,利用。

me_ysd的博客 5857

拥抱大前端 盘点那些值得你了解的最佳开发实践

前端领域生态繁荣,致力于提高生产效率的技术、工具不断推陈出新,可谓群雄割据且各有千秋。企业及前端开发者在实际开发中可选择的空间大大增加,但也面临着选择困难症。抑或虽已确定了技术栈,但实际开发中却时不时遭遇各种“坑”的牵绊。深入了解各大技术的优势与劣势,同时结合自身业务需求,你的技术选择之路将会变得更加明朗;深入了解其他企业对各大技术的应用实践及所踩过的坑,你的技术应用之路将会更加顺畅。毕竟有些人,有

优快云研发技术 1万+

计算机组成与系统结构(第三版) 袁春风主编 课后习题答案讲解 第一、二章 计算机系统概述 数据的机器级表示

计算机组成与系统结构(第三版) 袁春风主编 课后习题答案讲解 第一、二章 计算机系统概述 数据的机器级表示

qq_73523062的博客 2102

保姆级教程:用K210麦克风阵列模块实现声源定位(附完整Python代码与坐标计算)

本教程详细介绍了如何使用K210麦克风阵列模块实现高精度声源定位,包括硬件连接、算法解析与实战代码。通过Python代码示例,展示了从原始数据获取到三维空间坐标计算的完整流程,适用于智能家居、机器人导航等场景。

weixin_42558093的博客 229

壹[1],HandyControl开发记录

注:下载后运行源码时,可依据自身的安装环境,对项目进行调整,源码是支持多个平台的。

FairyTailQ的博客 1958

HTML5期末大作业:水果超市网站设计——水果超市(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 网购商城设置网页

HTML5期末大作业:水果超市网站设计——水果超市(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 网购商城设置网页 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业, 可满足大

1716

HierarchicalDataTemplate 动态菜单 Command 绑定

Value="{Binding DataContext.SysMenuCommand, ElementName=TestMainWindow}" />                                                                                                2. 有子

smalltownboy的专栏 1706

华为od 面试手撕代码题【完成任务最少小时】

华为od 面试手撕代码题【完成任务最少小时】

MISAYAONE的博客 1585

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

利用ASP.NET DataGrid显示主次关系的数据(VB.NET)

利用ASP.NET DataGrid显示主次关系的数据作者:孟宪会 出自:【孟宪会之精彩世界】 发布日期:2003年4月18日 12点0分0秒     大家在实际工作中有没有遇到要在DataGrid中显示带有主次结构的数据呢?如果你对ADO.NET和SQL Server2000熟悉的话,我们下面就举一个利用VS.NET自带的示例数据库Northwind和VB

1088

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

2017暑期实习招聘-产品经理-腾讯IMG(1)

Title Content 时间 2017-04-27 2:30 地点 北四环西路中国技术交易大厦F7 部门 腾讯IMG,做地图的 形式 面试 面试官 男性(好帅!) 插曲我提前半个小时到的,然后就是等待,过了面试时间20min,面试官还没有找我,我给hr打电话。过了一会将近15:00,面试官才来找我(看在面试官的颜值上,我的内心小小的不爽也释然了)。 面

iyangdi的博客 1177

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

身体各个时辰的变化

传统养生理论认为,人体各主要器官在一天中的十二个时辰内都有其相对固定的活动频繁期,即“生物钟”。        自然状态下,“小周天”运行一周恰好是一天,所以“小周天”也叫“子午周天”。中医经络学的“子午流注”理论就来源于此。穴位与经络一样,一昼夜的十二个时辰中是有变化的,这种变化称为“开合变化”,有气功点穴歌诀云:“周身气血沿经络,日夜不停在奔波。遇时点穴如受损,十人有九命归阴。”

eland_edwiin's coding journey 2000

给静态DataGrid动态添加列的问题

这个问题反复在论坛出现,其实这个问题在MSDN上早就有答案1。英文版:Top Questions about the DataGrid Web Server Control(Mike Pope and Nikhil Kothari)2。中文版:DataGrid Web 伺服器控制项的常见问题 可惜,论坛上的风气不太好,你即使给了连接,真正去看的人大概并不多 诀窍是,如果动态添加了列的话,需...

weixin_30411997的博客 148

4.7 Displaying Hierarchical Data in Table Views

分层显示数据 可能在pc上我们都用惯了树形结构的列表。比如文件目录,project navigator是吧。 手机上我们有时候也会想用树形结构来展示,但利用树形结构来展示的应用很少吧,反正我是没见过。 好了,真是废话一堆。 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIn

菜鸟的博客 683

28岁的千万富翁说:我为什么能够赚钱?

作者:http://www.donews.net/pangshengdong  mail: 200551@gmail.com版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明http://www.donews.net/pangshengdong题记:我自己都不好意思,这个标题有点张扬,但是没有办法,我希望更多的媒体转载这篇文章,能够让更多人看到,所以,标题一

庞升东的专栏 1965
上一篇: 分享:Hierarchy Datagrid 解决方案 (转)
下一篇: 让XSLT直接解析出XML里的Html标签
AllenTing
博客等级 码龄22年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值