请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

rex_chujie
金牌服务用户   /  发表于:2017-9-12 21:40  /   查看:3538  /  回复:1
我新增了一个类,继承自GC.Spread.Sheets.CellTypes.Text,用于展开/收缩某些行,定义如下
function TreeNodeCellType(startNo, endNo) {
        this.startNo = startNo;
        this.endNo = endNo;
    this.typeName = "TreeNodeCellType";
    this.parentMap = {};
}
TreeNodeCellType.prototype = new GC.Spread.Sheets.CellTypes.Text;

TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
    var level = options.sheet.rowOutlines.getLevel(options.row);
    var nlevel = -1;
    if (options.row < options.sheet.getRowCount() - 1) {
        nlevel = options.sheet.rowOutlines.getLevel(options.row + 1);
    }

    var __w = w;
    var __h = h;

    var __x = x;
    var __y = y;

    var hoffset = (level + 2) * 12;
    x += hoffset;
    w -= hoffset;


    GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);


    if (options.row < this.startNo
                    || options.row >= this.endNo) {
            return;
    }


    if (options.row == options.sheet.getRowCount() - 1) return; //last row

    ctx.save();
    ctx.fillStyle = "#FFE699";
    ctx.fillRect(__x,__y,hoffset,__h);
    ctx.restore();

    if (nlevel > level) {
            var key = options.row + "_" + options.col;
            this.parentMap[key] = "1";
           
        var collapsed = options.sheet.rowOutlines.isCollapsed(options.row + 1);
        x--;
        y += h / 2 - 3;


        ctx.save();
        ctx.fillStyle = "black";
        ctx.beginPath();
        if (collapsed) {
            ctx.moveTo(x - 5, y);
            ctx.lineTo(x, y + 3);
            ctx.lineTo(x - 5, y + 6);

        } else {
               
            ctx.moveTo(x, y);
            ctx.lineTo(x, y + 5);
            ctx.lineTo(x - 5, y + 5);

        }
        ctx.fill();
        ctx.restore();
    }
    else {
           
                x--;
        y += h / 2 - 3;
        ctx.save();
        ctx.restore();
    }
};
// override getHitInfo to allow cell type get mouse messages
TreeNodeCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
    return {
        x: x,
        y: y,
        row: context.row,
        col: context.col,
        cellStyle: cellStyle,
        cellRect: cellRect,
        sheetArea: context.sheetArea,
        sheet: context.sheet
    };
}
TreeNodeCellType.prototype.processMouseDown = function (hitinfo) {
    var level = hitinfo.sheet.rowOutlines.getLevel(hitinfo.row);
    var hoffset = (level + 2) * 12 + hitinfo.cellRect.x;

    if (this.parentMap[hitinfo.row + "_" + hitinfo.col] != null
                    && hitinfo.x < hoffset
                    && hitinfo.x > hoffset - 10
                    && hitinfo.y < hitinfo.cellRect.y + hitinfo.cellRect.height
                    && hitinfo.y > hitinfo.cellRect.y) {
           
        var collapsed = hitinfo.sheet.rowOutlines.isCollapsed(hitinfo.row + 1);
        hitinfo.sheet.rowOutlines.setCollapsed(hitinfo.row, !collapsed);
        hitinfo.sheet.invalidateLayout();
        hitinfo.sheet.repaint();
    }

    return true;
};

后面绑定了GC.Spread.Sheets.Events.SelectionChanging事件,在事件处理中,用到了spread.getActiveSheet().getActiveRowIndex()和spread.getActiveSheet().getActiveColumnIndex(),但每次获取的都是上一次点击的坐标



1 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-9-13 10:43:10
沙发
您好,很抱歉按照您提供的代码我没能重现您的问题,附件是我重现问题的demo,您能否提供一个重现问题的demo帮助我们来重现您的问题。

model_10.2.1.html.zip

1.67 KB, 下载次数: 74

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部