easyui-datagrid的合并单元格,只合并一列

来源:互联网 发布:win7无法安装软件 编辑:程序博客网 时间:2024/06/16 01:22
两个钟头,也许更长一点。总的来说,心情还是比较畅快的。毕竟,做出来一个问题,很可能以后会用到。闲话不多说。总结一下:

  这个问题不是老板要求的,是自己想要添加的效果。

  初次看文档,没弄明白到底是怎么回事儿。上网搜一下,其他人写过的。并没有看懂。不知道他们代表了什么意思。所以,陷入了僵局。可愁死我了。算了,抛开他们的方法,自己去写去。有时候就是有两种病态。总以为看别人的东西了解的快,解决问题也快。还有一种是对自己不自信。没有深入的去想这个问题。

        首先了解,这个easyui-datagrid的合并单元格是在前台展示的,并且可以合并的数据需要紧挨着放置,不然没办法去合并。多说这一句,就是让你分组查询。
        第二点是看懂文档,怎么去进行合并。api中提供了datagrid的megerCells方法。并提供四个参数。具体去看api。
        第三个问题是,案例是怎么进行合并。通过创建一个数组,存放要合并的数据对象。调用上述方法进行合并。

上述文档流程,是案例流程。但是具体到自己身上了。需要知道的是合并需要的数组怎么获取?

    循环数据,然后获取?当然是这样了。但是,获取正确的数据就成了问题了。
    要记住一个问题,最后一个都是可以合并的话,需要特别注意,这一点。

不说了,贴代码:
var productid;//创建初始化的要合并列的名称值
var rowspan=1;//初始化id相同的列只有它本身一项
var objectList=new Array();//初始化合并的项的集合
var index=0;//初始化数据下标为0
for(var i=0;i<data.rows.length;i++){
console.log(data.rows[i]);
if(data.rows[i].productid==productid){
//当这条数据的编号与上一条数据的编号一样的时候
rowspan ++;
if(i==data.rows.length-1){
var object=new Object();
object.index=index;
object.rowspan=rowspan;
objectList.push(object);
}
}else{
//这条数据与上一条数据编号不一样的时候
//1.当不一样的时候,首先判断条件是否足够合并列
if(rowspan>1){
//有相同的项,可以合并
var object=new Object();
object.index=index;
object.rowspan=rowspan;
objectList.push(object);
}
//当数据只有一条的时候,只能放弃合并了
//2.首先更新下标的值
index=i;
//3.更新id的值productid
productid=data.rows[i].productid;
//4.此时rowspan的值回归1
rowspan=1;
}
};
//输出要合并的项的list集合
console.log(objectList);
for(var i=0; i<objectList.length; i++){
$(this).datagrid('mergeCells',{
index: objectList[i].index,
field: 'productid',
rowspan: objectList[i].rowspan
});
}
这个不是最简单的,也不是最全面的。
    不是最简单:因为还可以把数据添加到数组中的话,可以提出来,写成一个方法。还有,只是适用于此情景,这个界面。想要应用到其他的界面,需要修改。
    不是最全面;这个只是合并了一个列,可以拓展到多个列。稍后去实现去。