FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 44922|回复: 22
打印 上一主题 下一主题

【已解决】Grid底部合计行功能实现,绝对定位到表格底部!

[复制链接]
楼主
发表于 2013-6-4 16:17:46 | 显示全部楼层
多谢,下个版本会增加几个示例,演示如果制作合计行。

-增加合计行示例grid/grid_summary.aspx(◇辉◆:)。
-增加服务器端合计行示例grid/grid_summary_serverside.aspx(◆◇提拉米苏℡)。






需要写部分JS和CSS代码:
  1. <script>

  2.         var gridClientID = '<%= Grid1.ClientID %>';

  3.         function calcGridSummary(grid) {
  4.             var donateTotal = 0, store = grid.getStore(), view = grid.getView(), storeCount = store.getCount();

  5.             // 防止重复添加了合计行
  6.             if (Ext.get(view.getRow(storeCount - 1)).hasClass('mygrid-row-summary')) {
  7.                 return;
  8.             }

  9.             // 遍历每一行数据,计算汇总数据
  10.             store.each(function (record) {
  11.                 // 注:donate是列的ColumnID属性
  12.                 donateTotal += parseInt(record.data["donate"]);
  13.             });
  14.             var donateAvg = donateTotal / storeCount;


  15.             store.add(new Ext.data.Record({
  16.                 'major': '合计:',
  17.                 'donate': donateTotal
  18.             }));

  19.             store.add(new Ext.data.Record({
  20.                 'major': '平均:',
  21.                 'donate': donateAvg
  22.             }));


  23.             // 为合计行添加自定义样式(隐藏序号列、复选框列,取消 hover 和 selected 效果)
  24.             Ext.get(view.getRow(storeCount)).addClass('mygrid-row-summary');
  25.             Ext.get(view.getRow(storeCount + 1)).addClass('mygrid-row-summary');

  26.         }

  27.         // 页面第一个加载完毕后执行的函数
  28.         function onReady() {
  29.             var grid = X(gridClientID);
  30.             grid.addListener('viewready', function () {
  31.                 calcGridSummary(grid);
  32.             });

  33.             // 防止选中合计行
  34.             grid.getSelectionModel().addListener('beforerowselect', function (sm, rowIndex, keepExisting, record) {
  35.                 if (Ext.get(grid.getView().getRow(rowIndex)).hasClass('mygrid-row-summary')) {
  36.                     return false;
  37.                 }
  38.                 return true;
  39.             });
  40.         }

  41.         // 页面AJAX回发后执行的函数
  42.         function onAjaxReady() {
  43.             var grid = X(gridClientID);
  44.             calcGridSummary(grid);
  45.         }
  46.     </script>
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
沙发
发表于 2013-6-4 17:59:09 | 显示全部楼层
冬天 发表于 2013-6-4 17:03
能显示在分页条的那里,有本页合计和总合计,就完美了。


你想要这样的效果么:


这个也好办,晚上给例子

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
板凳
发表于 2013-6-6 17:02:03 | 显示全部楼层
又增加了一个示例:-增加合计行绝对定位到分页条上方的示例grid/grid_summary_absolute.aspx。

这个效果可能是很多网友想要的,即使出现滚动条也能一眼看到合计行,不过实现需要一定的技巧。


  1. <script>

  2.         var gridClientID = '<%= Grid1.ClientID %>';
  3.         var gridSummaryID = '<%= hfGrid1Summary.ClientID %>';

  4.         function calcGridSummary(grid) {
  5.             var donateTotal = 0, store = grid.getStore(), view = grid.getView(), storeCount = store.getCount();

  6.             // 防止重复添加了合计行
  7.             if (Ext.get(view.getRow(storeCount - 1)).hasClass('mygrid-row-summary')) {
  8.                 return;
  9.             }

  10.             // 从隐藏字段获取全部数据的汇总
  11.             var summaryJSON = JSON.parse(Ext.getCmp(gridSummaryID).getValue());


  12.             store.add(new Ext.data.Record({
  13.                 'major': '全部合计:',
  14.                 'donate': summaryJSON['donateTotal'].toFixed(2),
  15.                 'fee': summaryJSON['feeTotal'].toFixed(2)
  16.             }));


  17.             // 为合计行添加自定义样式(隐藏序号列、复选框列,取消 hover 和 selected 效果)
  18.             var summaryNode = Ext.get(view.getRow(storeCount)).addClass('mygrid-row-summary');

  19.             // 找到合计行的外部容器节点
  20.             var viewportNode = summaryNode.parent('.x-grid3-viewport');
  21.             // 删除容器节点下直接子节点为 mygrid-row-summary 的节点
  22.             viewportNode.select('> .mygrid-row-summary').remove();

  23.             // 创建合计行的副本
  24.             var cloneSummaryNode = summaryNode.dom.cloneNode(true);
  25.             // 修改合计行的副本的样式,绝对定位,距离底部0px,显示副本(默认是占位隐藏 visibility: hidden;)
  26.             Ext.get(cloneSummaryNode).setStyle({
  27.                 position: 'absolute',
  28.                 bottom: 0,
  29.                 visibility: 'visible'
  30.             });

  31.             // 向容器节点添加合计行的副本
  32.             viewportNode.appendChild(cloneSummaryNode);
  33.        
  34.         }

  35.         // 页面第一个加载完毕后执行的函数
  36.         function onReady() {
  37.             var grid = X(gridClientID);
  38.             grid.addListener('viewready', function () {
  39.                 calcGridSummary(grid);
  40.             });

  41.             // 防止选中合计行
  42.             grid.getSelectionModel().addListener('beforerowselect', function (sm, rowIndex, keepExisting, record) {
  43.                 if (Ext.get(grid.getView().getRow(rowIndex)).hasClass('mygrid-row-summary')) {
  44.                     return false;
  45.                 }
  46.                 return true;
  47.             });
  48.         }

  49.         // 页面AJAX回发后执行的函数
  50.         function onAjaxReady() {
  51.             var grid = X(gridClientID);
  52.             calcGridSummary(grid);
  53.         }
  54.     </script>
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-1 08:10 , Processed in 0.045484 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表