ligerui.grid.extend.rowSpan
- 扩展LigerUI的Grid中的相同列合并行功能,代码如下:
$.extend($.ligerui.controls.Grid.prototype, {- _getHtmlFromData:function(data, frozen) {
- if (!data) return "";
- var g = this, p = this.options;
- var gridhtmlarr = [];
- var rowSpanData = {};
- var islast = false;
- for (var i = 0, l = data.length; i < l; i++)
- {
- islast = (i==data.length-1);
- var item = data[i];
- var rowid = item['__id'];
- if (!item) continue;
- gridhtmlarr.push('<tr');
- gridhtmlarr.push(' id="' + g._getRowDomId(item, frozen) + '"');
- gridhtmlarr.push(' class="l-grid-row'); //class start
- if (!frozen && g.enabledCheckbox() && p.isChecked && p.isChecked(item))
- {
- g.select(item);
- gridhtmlarr.push(' l-selected');
- }
- else if (g.isSelected(item))
- {
- gridhtmlarr.push(' l-selected');
- }
- else if (p.isSelected && p.isSelected(item))
- {
- g.select(item);
- gridhtmlarr.push(' l-selected');
- }
- if (item['__index'] % 2 == 1 && p.alternatingRow)
- gridhtmlarr.push(' l-grid-row-alt');
- //自定义css class
- if (p.rowClsRender)
- {
- var rowcls = p.rowClsRender(item, rowid);
- rowcls && gridhtmlarr.push(' ' + rowcls);
- }
- gridhtmlarr.push('" '); //class end
- if (p.rowAttrRender) gridhtmlarr.push(p.rowAttrRender(item, rowid));
- if (p.tree && g.collapsedRows && g.collapsedRows.length)
- {
- var isHide = function ()
- {
- var pitem = g.getParent(item);
- while (pitem)
- {
- if ($.inArray(pitem, g.collapsedRows) != -1) return true;
- pitem = g.getParent(pitem);
- }
- return false;
- };
- if (isHide()) gridhtmlarr.push(' style="display:none;" ');
- }
- else if (p.tree && p.tree.isExtend)
- {
- var isHide = function ()
- {
- var pitem = g.getParent(item);
- while (pitem)
- {
- if (p.tree.isExtend(pitem) == false) return true;
- pitem = g.getParent(pitem);
- }
- return false;
- };
- if (isHide()) gridhtmlarr.push(' style="display:none;" ');
- }
- gridhtmlarr.push('>');
- $(g.columns).each(function (columnindex, column)
- {
- if (frozen != column.frozen) return;
- if(column.rowSpan){
- var key = column.name;
- var data = rowSpanData[key];
- var value = g._getCellContent(item, column);
- if(data){
- if(data.value==value){
- data.count = data.count+1;
- rowSpanData[key] = data;
- if(!islast){
- return true;
- }
- }else{
- if((data.domId&&data.count>1)){
- var rowSpanTd = 'id="'+data.domId+'"';
- $.each(gridhtmlarr,function(index,str){
- if(rowSpanTd==$.trim(str)){
- str = str+" rowspan="+data.count;
- gridhtmlarr[index] = str;
- }
- });
- }
- data = {value:value,count:1,domId:g._getCellDomId(item, this)};
- rowSpanData[key] = data;
- }
- if(islast){
- if((data.domId&&data.count>1)){
- var rowSpanTd = 'id="'+data.domId+'"';
- $.each(gridhtmlarr,function(index,str){
- if(rowSpanTd==$.trim(str)){
- str = str+" rowspan="+data.count;
- gridhtmlarr[index] = str;
- }
- });
- return true;
- }
- }
- }else{
- data = {value:value,count:1,domId:g._getCellDomId(item, this)};
- rowSpanData[key] = data;
- }
- }
- gridhtmlarr.push('<td');
- gridhtmlarr.push(' id="' + g._getCellDomId(item, this) + '"');
- //如果是行序号(系统列)
- if (this.isrownumber)
- {
- gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-rownumbers" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
- if (p.fixedCellHeight)
- gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
- else
- gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
- gridhtmlarr.push('>' + (parseInt(item['__index']) + 1) + '</div></td>');
- return;
- }
- //如果是复选框(系统列)
- if (this.ischeckbox)
- {
- gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-checkbox" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
- if (p.fixedCellHeight)
- gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
- else
- gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
- gridhtmlarr.push('>');
- gridhtmlarr.push('<span class="l-grid-row-cell-btn-checkbox"></span>');
- gridhtmlarr.push('</div></td>');
- return;
- }
- //如果是明细列(系统列)
- else if (this.isdetail)
- {
- gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-detail" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
- if (p.fixedCellHeight)
- gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
- else
- gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
- gridhtmlarr.push('>');
- if (!p.isShowDetailToggle || p.isShowDetailToggle(item))
- {
- gridhtmlarr.push('<span class="l-grid-row-cell-detailbtn"></span>');
- }
- gridhtmlarr.push('</div></td>');
- return;
- }
- var colwidth = this._width;
- gridhtmlarr.push(' class="l-grid-row-cell ');
- if (g.changedCells[rowid + "_" + this['__id']]) gridhtmlarr.push("l-grid-row-cell-edited ");
- if (this.islast)
- gridhtmlarr.push('l-grid-row-cell-last ');
- gridhtmlarr.push('"');
- //if (this.columnname) gridhtmlarr.push('columnname="' + this.columnname + '"');
- gridhtmlarr.push(' style = "');
- gridhtmlarr.push('width:' + colwidth + 'px; ');
- if (column._hide)
- {
- gridhtmlarr.push('display:none;');
- }
- gridhtmlarr.push(' ">');
- gridhtmlarr.push(g._getCellHtml(item, column));
- gridhtmlarr.push('</td>');
- });
- gridhtmlarr.push('</tr>');
- }
- return gridhtmlarr.join('');
- }
- });
但我们往往在合并行时,是需要根据行的其他值来判断,譬如订单号不同,那其后面的行就不能合并成一行,因为如果合并成一行,反而不清晰,最佳的办法是如果前面的列不同,后面的列合并时,不能跨行合并
以上代码稍作调整:
- if (column.rowSpan) {//如果列定义了合并行 update zjy
- var key = column.name;
- var data = rowSpanData[key]; //获取合并行的合集
- var value = g._getCellContent(item, column);//这个行对应列的值
- if (data) {//存在, 在循环第二行或者多行的情况下,判断是否和上一行有相同的值,如果有相同,表示合并1行+1,
- if (data.value == value) {
- data.count = data.count + ;//合并的行数
- rowSpanData[key] = data;//重新赋值到集合
- if (!islast) {
- return true;
- }
- } else {
- //如果相同的列名,但和上一行不一致,那就重新赋值,重新赋值之前,将之前的rowspan赋值。
- if ((data.domId && data.count > )) {
- var rowSpanTd = 'id="' + data.domId + '"';
- $.each(gridhtmlarr, function (index, str) {
- if (rowSpanTd == $.trim(str)) {
- str = str + " rowspan=" + data.count;
- gridhtmlarr[index] = str;
- }
- });
- $(g.columns).each(function (x, m) {
- if (m.rowSpan) {
- if (data.orderseq < x) {
- var _find = rowSpanData[m.name]; //获取合并行的合集
- if (_find) {
- if ((_find.domId && _find.count > )) {
- var _findRowSpanTd = 'id="' + _find.domId + '"';
- $.each(gridhtmlarr, function (_index, _str) {
- if (_findRowSpanTd == $.trim(_str)) {
- _str = _str + " rowspan=" + _find.count;
- gridhtmlarr[_index] = _str;
- }
- });
- }
- //data = { value: g._getCellContent(item, m), count: 1, domId: g._getCellDomId(item, this), orderseq: x };
- rowSpanData[m.name] = null; //置空
- }
- }
- }
- });
- }
- else if (data.domId && data.count == ) {
- $(g.columns).each(function (x, m) {
- if (m.rowSpan) {
- if (data.orderseq < x) {
- var _find = rowSpanData[m.name]; //获取合并行的合集
- if (_find) {
- if ((_find.domId && _find.count > )) {
- var _findRowSpanTd = 'id="' + _find.domId + '"';
- $.each(gridhtmlarr, function (_index, _str) {
- if (_findRowSpanTd == $.trim(_str)) {
- _str = _str + " rowspan=" + _find.count;
- gridhtmlarr[_index] = _str;
- }
- });
- }
- rowSpanData[m.name] = null; //置空
- }
- }
- }
- });
- }
- //重新将这个列名赋值到集合列
- data = { value: value, count: , domId: g._getCellDomId(item, this), orderseq: columnindex };
- rowSpanData[key] = data;
- //rowSpanData[key] = null;
- }
- if (islast) {
- //最后一个直接赋值rowSpan
- if ((data.domId && data.count > )) {
- var rowSpanTd = 'id="' + data.domId + '"';
- $.each(gridhtmlarr, function (index, str) {
- if (rowSpanTd == $.trim(str)) {
- str = str + " rowspan=" + data.count;
- gridhtmlarr[index] = str;
- }
- });
- return true;
- }
- }
- } else {
- //没有在合并行中出现,就是第一个,将这个值保存在临时合并行集合中
- data = { value: value, count: , domId: g._getCellDomId(item, this), orderseq: columnindex };
- rowSpanData[key] = data;
- }
- }
- columns: [ { rowSpan: true }]
ligerui.grid.extend.rowSpan的更多相关文章
- 扩展Jquery方法创建LigerUI Grid
///** //*封装jquery get请求ajax //*author:叶明龙 //*time:2012-12-10 //*/ function getAjax(url, para, fn) { ...
- Ligerui Grid组件--学生信息列表
一.目录 1.多层架构+MVC+EF+AUTOFAC+AUTOMAPPER: 2.MVC中验证码的实现(经常用,记录备用) 3.Ligerui首页的快速搭建 4.Ligerui Grid组件--学生信 ...
- 关于ligerui grid 行内编辑 combobox 只能选择的问题
这个貌似是天然的不支持,修复方案,在ligerGridOrd.js中添加一行代码,如下,跟了一下午的源码,发现在这里的时候,options中只保留了combobox中的一部分属性,所以可能combob ...
- [ligerUI] grid封装调用方法
/** * 获取页面参数 */ function getPageSize(){ var xScroll, yScroll; if (window.innerHeight && wind ...
- ligerui grid行编辑示例
<%@ page contentType="text/html; charset=UTF-8" %> <% String path = request.getCo ...
- LigerUI权限系统之角色管理
角色管理比前面几个页面都稍显复杂点.好吧,还是先看图. 左边是角色列表,右边是页面列表,它们也是多对多的关系,即一个角色可以访问多个页面,同时一个页面也可以被多个角色访问. 点击左边的角色,刷新右边页 ...
- ligerUI实现分页
在公司实习看到公司框架里使用了ligerUI的grid进行分页,个人感觉挺好用的,自己摸索着实现了一遍记录下来 简单来说,liger grid 就是提交准备好的数据到指定的目标请求数据,拿到数据以后, ...
- 14、手把手教你Extjs5(十四)模块字段和Grid列的定义[2]
model和columns生成好了,下面要修改一下Module.js和Grid.js中的代码,使其能够协同工作. /** * 一个模块的主控界面的容器,用来安放各个模块控件以及协调他们之间的关系 */ ...
- Ligerui首页的快速搭建
一.目录 1.多层架构+MVC+EF+AUTOFAC+AUTOMAPPER: 2.MVC中验证码的实现(经常用,记录备用) 3.Ligerui首页的快速搭建 4.Ligerui Grid组件--学生信 ...
随机推荐
- php 获得访问者的IP
<?php $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : ...
- bing map for wpf 怎么显示中文地图
添加一下代码: string suriFormat = "http://r2.tiles.ditu.live.com/tiles/r{quadkey}.png?g=41"; Mic ...
- js文件中如何使用 获取EL表达式的值
转: js文件中如何使用 获取EL表达式的值 原先做法是在jsp页面引入头文件 <%@ page language="java" pageEncoding="UTF ...
- 19 Flutter 自定义AppBar 定义顶部Tab切换 底部Tab结合顶部Tab实现类似头条页面布局(27分36秒)
Flutter AppBar自定义顶部导航按钮图标.颜色以及TabBar定义顶部Tab切换. leading:在标题前面显示的一个控件,在首页通常显示应用的logo:在其他界面通常显示为付汇按钮. t ...
- Scratch3架构结构说明
Scratch3.0整体项目结构比较庞大,对于不同二次开发开始的时候会出现一头雾水,需要先了解下整体框架,可以按需要在指定的源码下进行修改,大致结构如下: 1. scratch-gui: 是基于Rea ...
- 斑马打印机ZBL语言
ZBL手册:https://pan.baidu.com/s/1I8DaMUlf-9ytUwqtURw8rw 下面是打印CODE128条形码的代码 ^XA^FO100,100^BY6 ...
- 游戏协议模拟测试工具(TcpEngine)使用简介
功能介绍 在有的网络开发需要走二进制流协议场景,比如网络游戏开发,在开发阶段,前端和后端协商好协议后就分别开发.在开发写代码的时候,有时需要对端发送一条完整的协议过来触发一下自己的代码,进行单步调试或 ...
- 【miscellaneous】MPEG2、MPEG4、H264的差异
MPEG2.MPEG4.H264的差异 MPEG-2简介 MPEG-2制定于1994年,设计目标是高级工业标准的图象质量以及更高的传输率.MPEG-2所能提供的传输率在3-10Mbits/sec间,其 ...
- lcd timing的理解
所谓调lcd timing就是去调lcd时序,一般是6个部分:HFPD(在一行扫描以前需要多少个像素时钟),HBPD(一行扫描结束到下一行扫描开始需要多少个像素时钟),VFPD(一帧开始之前需要多少个 ...
- 26.Spark创建RDD集合
打开eclipse创建maven项目 pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x ...