大家好,这半年工作上有点小忙,好久没写博了。

今天,要给大家分享的是JS框架DHTMLX中的表格控件dhtmlxgrid的一组功能的实现,这些功能在高级版(付费版)中已经有相关的接口了。因为在开发中需要,我费了前后一天时间(有点长,当时还在毕业实习呢,还算可以吧)写了grid行的置顶置底功能,以及拖动排序功能,代码写的可能有些烂,本应抽时间重构一下的,但是呢没有。在此,请大家对此功能有需要的,拷过去记着重构一下哦,不然你家产品经理打你我可不负责任哦,罪过,罪过,开玩笑了,貌似所有产品经理都长得很帅的!

/*
 * @ 对系统中需要的表格进行置顶,置底以及使用拖拽方法进行排序
 * author zhangwenyu
 */
function isSelectedCheck(param1,mygrid){  //指标置顶或者置底
     if (mygrid.getSelectedRowId()==null) {
        alert("请选中指标再做置顶!");
    }else{
		if(param1=="setTop"){ //检查参数,识别是置顶还是置底
			setTop(mygrid);
		}else{
			setBottom(mygrid);
		}
	}
}
function setTop(mygrid){    //指标列表置顶**********
	var arr = getArrayOfIndicators(mygrid);	
    var indexs = getSelectedRowIndexs(mygrid); 
    var cellIndicatorArrayLength = mygrid.getColumnsNum()+1;   //单位指标的数组长度(所有列的值加上行id)
    var selectValues = [];
    for (var n = 0; n < indexs.length; n++) {  //获取已选指标的列表
        var cell = arr.slice(indexs[n] * cellIndicatorArrayLength, indexs[n] * cellIndicatorArrayLength + cellIndicatorArrayLength);
        selectValues = selectValues.concat(cell);
    }
    for (var h = indexs.length; h > 0; h--) {  //删除已选指标列表
        arr.splice(indexs[h - 1] * cellIndicatorArrayLength, cellIndicatorArrayLength);
    }
    arr.reverse(); //将除过已选的指标顺序颠倒
    selectValues.reverse(); //将已选的指标顺序颠倒
    var arry = arr.concat(selectValues).reverse(); //将已选的增加到未选的指标后面,然后重新颠倒,即置顶成功
    reCreatMyrightgrid(arry,mygrid );   
}
function setBottom(mygrid){  //指标列表置底**********
	var arr = getArrayOfIndicators(mygrid);
	var indexs = getSelectedRowIndexs(mygrid); 
	var cellIndicatorArrayLength = mygrid.getColumnsNum()+1;   //单位指标的数组长度(所有列的值加上行id)
	var selectValues = [];
    for (var n = 0; n < indexs.length; n++) {  //获取已选指标的列表
        var cell = arr.slice(indexs[n] * cellIndicatorArrayLength, indexs[n] * cellIndicatorArrayLength+ cellIndicatorArrayLength);
        selectValues = selectValues.concat(cell);
    }
	for (var h = indexs.length; h > 0; h--) {  //删除已选指标列表
        arr.splice(indexs[h - 1] * cellIndicatorArrayLength, cellIndicatorArrayLength);
    }
	var arr=arr.concat(selectValues);
	reCreatMyrightgrid(arr,mygrid );
}
function getArrayOfIndicators(mygrid){   //获取Grid表格数据对应的数组
	var arr = []; 
	var rowNums = mygrid.getRowsNum(); //获取指标总行数
	var colNums = mygrid.getColumnsNum();  //获取表格的列数
    for (var i = 0; i < rowNums; i++) {
        for (var j = 0; j < colNums; j++) {
            arr.push(mygrid.cells2(i, j).getValue());
        }
        arr.push(mygrid.getRowId(i));
    }
	return arr;
}
function getSelectedRowIndexs(mygrid){ //获取”导入指标列表“中选中指标的索引
    var selectId = mygrid.getSelectedRowId().split(",");
    var selectIndex = [];
    for (var i = 0; i < selectId.length; i++) {
        selectIndex[i] = mygrid.getRowIndex(selectId[i]);
    }    
    return selectIndex.sort(sortNumber);//为了删除原有选中指标方便,在此首先对索引排序,先删除索引大的
}
function sortNumber(a, b){  //数组根据数值排序的参数方法
    return a-b;
}
function reCreatMyrightgrid(array,mygrid){  //刷新新的指标列表
	mygrid.clearAll(false);
	var cellIndicatorArrayLength = mygrid.getColumnsNum()+1;   //单位指标的数组长度(所有列的值加上行id)
	var newArray=[];  //用来存储指标列表内容
	var newArrayId=[];  //用来存储新列表的Id
	if(cellIndicatorArrayLength==6){   //如果表格总共有5列
		   for(var i=0;i 0; h--) {  //删除已选指标列表
            arr.splice(indexs[h - 1] * cellIndicatorArrayLength, cellIndicatorArrayLength);
        }
        if(sid>tid){
        	for(var i=0;i

拷好了没?我懒得检查了,代码里面有“Indicator”指的是指标的意思,是统计部门的指标,所以最好改一下,不然你家产品经理又打你!!!哈哈,因为你写的这嘛意思他看不懂啊!!(实在需要帮助,请找[email protected]吧,他会乐于助你的,嘿嘿!)