miniui之内嵌子表格

项目中有这样一个需求,
这里写图片描述
想一下这种的展示方式,我选择了miniui中的内嵌子表格的展示形式,也就是这种样式
这里写图片描述
这里用到的一个方法是:onbeforehiderowdetail=”onBeforeHideRowDetail”
在需要进行展开的列上添加这个属性type=”expandcolumn”
但是这个字段是针对于整个行来说的,如果给两列都添加这个属性的话,展示不同的子表格这时就会出现问题了
1.首先我要做的事重新绘制表格,给需要扩展的列换图标

 grid_main.on('drawcell',function(e){
             //汇总行业和地区的总数
            var field = e.field;
            var value = e.value;
            var recode = e.record;
            var num = 0;
            var dusNum = 0;
            if(field == 'region'){
                for(var i=0;i<value.length;i++){
                   num += value[i]["num"]
                }
                e.cellCls += ' local';
                if(value.length<10){
                     e.cellHtml = '<a class="mini-grid-ecIcon" style="margin-left:4%"  href="javascript::#" onclick="return false"></a>'+value.length+'个地区';
                }else{
                     e.cellHtml = '<a class="mini-grid-ecIcon" style="margin-left:6%"  href="javascript::#" onclick="return false"></a>'+value.length+'个地区';
                }

            }
            if(field == 'dustury'){
                 for(var i=0;i<value.length;i++){
                   dusNum += value[i]["num"]
                }
                 e.cellCls += ' dustury';
                if(value.length<10){
                     e.cellHtml = '<a class="mini-grid-ecIcon" style="margin-left:4%"  href="javascript:#" onclick="return false"></a>'+value.length+'个行业'
                }else{
                     e.cellHtml = '<a class="mini-grid-ecIcon" style="margin-left:6%"  href="javascript:#" onclick="return false"></a>'+value.length+'个行业'
                }

            }
        })

2.给子表格的行添加点击事件,填充数据,这部也是用来区分不同的列

if (window.grid_main) {
            grid_main.on("cellclick", function (e) {
                if (e.field == 'region') {
                    var json = {};
                    datagrid=[];
                    somehow = 'region';
                    for (var i = 0; i < e.record.region.length; i++) {
                        json = {
                            regionName:e.record.region[i]["name"],
                            regionNum: e.record.region[i]["num"]
                        }
                        datagrid.push(json)
                    }
                    employee_grid.setData(datagrid);
                    dataResult = mini.decode({
                        "total": datagrid.length,
                        "data": datagrid
                    });
                    // 第一次设置
                    fillData(0, gridChil.getPageSize(), dataResult, gridChil);
                }else if(e.field == 'dustury'){
                    var json = {};
                    somehow = 'dustury';
                     datagrid=[];
                    for (var i = 0; i < e.record.dustury.length; i++) {
                        json = {
                            regionName:e.record.dustury[i]["name"],
                            regionNum: e.record.dustury[i]["num"]
                        }
                        datagrid.push(json)
                    }
                    employee_grid.setData(datagrid);
                     dataResult = mini.decode({
                        "total": datagrid.length,
                        "data": datagrid
                    });
                    // 第一次设置
                    fillData(0, gridChil.getPageSize(), dataResult, gridChil);
                }

            })

3.onShowRowDetail显示子表格的方法

function onShowRowDetail(e){
            var grid = e.sender;
            var row = e.record;
            var td = grid.getRowDetailCellEl(row);
            td.appendChild(detailGrid_Form);
            detailGrid_Form.style.display = "block";
        }

4.子表格的客户端分页

  function fillData(pageIndex, pageSize, dataResult, grid) {

        var data = dataResult.data, totalCount = dataResult.total;

        var arr = [];
        var start = pageIndex * pageSize, end = start + pageSize;
        for (var i = start, l = end; i < l; i++) {
            var record = data[i];
            if (!record) continue;
            arr.push(record);
        }


        grid.setTotalCount(totalCount);
        grid.setPageIndex(pageIndex);
        grid.setPageSize(pageSize);

        grid.setData(arr);
    }
      // 监听分页前事件,阻止后自行设置当前数据和分页信息
    gridChil.on("beforeload", function (e) {
        e.cancel = true;
        var pageIndex = e.data.pageIndex, pageSize = e.data.pageSize;
        fillData(pageIndex, pageSize, dataResult, gridChil);
    });

这部分算是完成了。以下跟这部分没关系:纯属个人想展示一下代码:
var json = [
{region:[{name:”jinjin”,num:123},{name:”jinjin2”,num:1233}]},
{region:[{name:”jinjin”,num:444},{name:”jinjin2”,num:1233}]},
]

   var arr2 = [];

                function findIndex(value, array) {
                    for (var i = 0; i < array.length; i++) {
                        if (array[i].name == value) {
                            return i;
                        }
                    }
                    return -1;
                }

                 var index = -1;
                for (var i = 0; i < json.length; i++) {

                    index = findIndex(json[i].num, arr2);

//这里判断后看物件是要进到新阵列,还是把新阵列中已有的物件中poll属性作相加
                    if (index === -1) {
                        arr2.push(region[i]);
                    } else {
                        arr2[index].num += json[i].num;
                    }

                }

猜你喜欢

转载自blog.csdn.net/oncemore520/article/details/80655686
今日推荐