You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
4.7 KiB
140 lines
4.7 KiB
/**
|
|
* jqGrid complexGroupHeaders
|
|
* name cj
|
|
* email 85309651@qq.com
|
|
* blog http://cjblog.iteye.com/
|
|
* version 0.2
|
|
* date 2012-06-03
|
|
**/
|
|
(function($){
|
|
$.jgrid.extend({
|
|
setComplexGroupHeaders : function(o) {
|
|
var $t = this[0];
|
|
if(!$t.grid) { return; }
|
|
var $ghs;
|
|
if(o.groupHeaders){
|
|
$ghs = o.groupHeaders;
|
|
$(this).setGroupHeaders(o);
|
|
}else{
|
|
$ghs = $t.p.groupHeader;
|
|
}
|
|
var $cghs = o.complexGroupHeaders;
|
|
if(!$cghs){return;}
|
|
var colModel = $t.p.colModel;
|
|
var s_ths = $("#gbox_"+$t.id+" .ui-jqgrid-htable .jqg-second-row-header > th");
|
|
for(var i=0;i<$ghs.length;i++){
|
|
var ghItem = $ghs[i];
|
|
var count_secondCol = 0;
|
|
for(var j=0;j<colModel.length;j++){
|
|
if(colModel[j].name==ghItem.startColumnName){
|
|
break;
|
|
}
|
|
count_secondCol++;
|
|
}
|
|
for(var j=0;j<i;j++){
|
|
count_secondCol = count_secondCol - ($ghs[j].numberOfColumns-1);
|
|
}
|
|
$(s_ths[count_secondCol]).attr("startColName","s_" + ghItem.startColumnName)
|
|
.attr("numberOfColumns",ghItem.numberOfColumns);
|
|
}
|
|
var newTr = $('<tr role="rowheader" class="ui-jqgrid-labels jqg-four-row-header"></tr>');
|
|
var moveThs = {};
|
|
var setThStatus = function(columnName,th,status){
|
|
var thItem = moveThs[columnName];
|
|
if(!thItem){
|
|
moveThs[columnName] = th;
|
|
thItem = th;
|
|
}
|
|
if(thItem.attr("status")!=0 && thItem.attr("status")!=3){
|
|
thItem.attr("status",status);
|
|
}
|
|
};
|
|
|
|
var startIndex,endIndex;
|
|
for(var i=0;i<$cghs.length;i++){
|
|
for(var j=0;j<colModel.length;j++){
|
|
var colItem = colModel[j];
|
|
if(colItem.name == $cghs[i].startColumnName){
|
|
startIndex = j;
|
|
endIndex = startIndex + $cghs[i].numberOfColumns;
|
|
break;
|
|
}
|
|
}
|
|
for(var j=0;j<colModel.length;j++){
|
|
var colItem = colModel[j];
|
|
var thItem = $("thead #" + $t.id + "_" + colItem.name);
|
|
if(j<startIndex||j>=endIndex){
|
|
if(thItem.attr("rowspan")==2){
|
|
thItem.attr("sortable",colItem.sortable);
|
|
thItem.attr("colmodeName",colItem.name);
|
|
setThStatus(colItem.name,thItem,1);
|
|
}else if(!thItem.attr("rowspan")){
|
|
var th = $("#gbox_"+$t.id+" .ui-jqgrid-htable .jqg-second-row-header th[startcolname='s_"+colItem.name+"']");
|
|
if(th.length!=0){
|
|
setThStatus("s_" + colItem.name,th,2);
|
|
}
|
|
}
|
|
}else if(j==startIndex){
|
|
var newTh = $('<th role="columnheader" class="ui-state-default ui-th-column-header ui-th-ltr" style="height: 22px; border-top-width: 0px; border-top-style: none; border-top-color: initial; "></th>');
|
|
newTh.attr("colspan",$cghs[i].numberOfColumns).html($cghs[i].titleText);
|
|
setThStatus(colItem.name,thItem,0);
|
|
setThStatus("n_"+colItem.name,newTh,3);
|
|
var th = $("#gbox_"+$t.id+" .ui-jqgrid-htable .jqg-second-row-header th[startcolname='s_"+colItem.name+"']");
|
|
if(th.length!=0){
|
|
var clonTh = th.clone(true);
|
|
setThStatus("s_" + colItem.name,clonTh,0);
|
|
}
|
|
}else{
|
|
setThStatus(colItem.name,thItem,0);
|
|
var th = $("#gbox_"+$t.id+" .ui-jqgrid-htable .jqg-second-row-header th[startcolname='s_"+colItem.name+"']");
|
|
if(th.length!=0){
|
|
var clonTh = th.clone(true);
|
|
setThStatus("s_" + colItem.name,clonTh,0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (prop in moveThs) {
|
|
var item = moveThs[prop];
|
|
var status = item.attr("status");
|
|
if(status==1){
|
|
item.attr("rowSpan","3");
|
|
var cloneItem = item.clone(true);
|
|
if(cloneItem.attr("sortable")=='true'){
|
|
cloneItem.unbind("click");
|
|
cloneItem.click(function(){
|
|
$("#gbox_"+$t.id+" .ui-jqgrid-htable .s-ico").css("display","none");
|
|
var name = $(this).attr("colmodeName");
|
|
$t.p.sortname = name;
|
|
$(this).find("span.s-ico").css("display","inline");
|
|
var ascClass = $(this).find("span.ui-icon-asc").attr("class");
|
|
var reg = /.*ui-state-disabled.*/ig;
|
|
var result = reg.test(ascClass);
|
|
if(result){
|
|
$t.p.sortorder = 'asc';
|
|
$(this).find("span.ui-icon-asc").removeClass("ui-state-disabled");
|
|
$(this).find("span.ui-icon-desc").addClass("ui-state-disabled");
|
|
}else{
|
|
$t.p.sortorder = 'desc';
|
|
$(this).find("span.ui-icon-desc").removeClass("ui-state-disabled");
|
|
$(this).find("span.ui-icon-asc").addClass("ui-state-disabled");
|
|
}
|
|
$($t).trigger("reloadGrid");
|
|
});
|
|
}
|
|
newTr.append(cloneItem);
|
|
item.remove();
|
|
}else if(status==2){
|
|
item.attr("rowSpan","2");
|
|
var cloneItem = item.clone(true);
|
|
newTr.append(cloneItem);
|
|
item.remove();
|
|
}else if(status==3){
|
|
newTr.append(item);
|
|
}
|
|
}
|
|
var second_tr = $("#gbox_"+$t.id+" .ui-jqgrid-htable .jqg-second-row-header");
|
|
newTr.insertBefore(second_tr);
|
|
}
|
|
});
|
|
})(jQuery);
|