找回密码
 立即注册

QQ登录

只需一步,快速开始

寒梅落尽

注册会员

4

主题

19

帖子

49

积分

注册会员

积分
49
最新发帖

[已处理] 批量删除问题

寒梅落尽
注册会员   /  发表于:2018-1-15 16:56  /   查看:4119  /  回复:6
本帖最后由 寒梅落尽 于 2018-1-15 16:59 编辑

现在需要实现一个批量删除功能,通过在首列添加一列复选框来标记选中数据,我再论坛找到的demo写在我的代码里,但是一直出错,能不能帮看下,下面是代码和错误原因
function AddCheckBox(spread) {
    var spreadNS = GC.Spread.Sheets;
    var sheet = spread.getSheet(0);
    sheet.addColumns(0, 1);
    sheet.suspendPaint();
    var c = new spreadNS.CellTypes.CheckBox();
    c.isThreeState(false);
    c.textTrue("");
    c.textFalse("");
    sheet.setColumnWidth(0, 100);
    sheet.setCellType(0, 0, new HeaderCheckBoxCellType(), GC.Spread.Sheets.SheetArea.colHeader);
    for (var i = 0; i < spread.getSheet(0).getRowCount() ; i++) {
        sheet.setCellType(i, 0, c);
        c.textAlign(GC.Spread.Sheets.CellTypes.CheckBoxTextAlign.center);
    }
    sheet.resumePaint();

    function setRowCheck(sheet, row) {
        var checkedIndexList = getCheckedRowIndexList(sheet);
        if (checkedIndexList.length === 0) {
            sheet.setValue(row, 0, true, GcSpread.Sheets.SheetArea.rowHeader);
        }
    }

    function setRangeCheck(sheet, row, rowCount) {
        var checkedIndexList = getCheckedRowIndexList(sheet);
        if (checkedIndexList.length === 0) {
            sheet.isPaintSuspended(true)
            for (var i = row; i < row + rowCount; i++) {
                sheet.setValue(i, 0, true, GcSpread.Sheets.SheetArea.rowHeader);
            }
            sheet.isPaintSuspended(false)
        }
    }

    function getCheckedRowIndexList(sheet) {
        var indexList = [];
        var rowCount = sheet.getRowCount();
        for (var i = 0; i < rowCount; i++) {
            var value = sheet.getValue(i, 0, GcSpread.Sheets.SheetArea.rowHeader);
            if (value === true) {
                indexList.push(i);
            }
        }

        return indexList;
    }


    function getCheckedRowIndexListInRange(sheet, start, end) {
        var indexList = [];
        var rowCount = sheet.getRowCount();
        for (var i = start; i < end; i++) {
            var value = sheet.getValue(i, 0, GcSpread.Sheets.SheetArea.rowHeader);
            if (value === true) {
                indexList.push(i);
            }
        }

        return indexList;
    }
    function HeaderCheckBoxCellType() {
    }
    HeaderCheckBoxCellType.prototype = new GC.Spread.Sheets.CheckBoxCellType();

    HeaderCheckBoxCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
        if (context) {
            return { x: x, y: y, row: context.row, col: context.col, cellRect: cellRect, sheetArea: context.sheetArea, isReservedLocation: true, sheet: context.sheet };
        }
        return null;
    };

    HeaderCheckBoxCellType.prototype.processMouseUp = function (hitInfo) {
        var sheet = hitInfo.sheet, sheetArea = hitInfo.sheetArea,
            row = hitInfo.row, col = hitInfo.col;

        var value = !(sheet.getValue(row, col, sheetArea) || false);

        sheet.setValue(row, col, value, sheetArea);

    };

    function getActualRange(range, maxRowCount, maxColCount) {
        var row = range.row < 0 ? 0 : range.row;
        var col = range.col < 0 ? 0 : range.col;
        var rowCount = range.rowCount < 0 ? maxRowCount : range.rowCount;
        var colCount = range.colCount < 0 ? maxColCount : range.colCount;

        return new spreadNS.Range(row, col, rowCount, colCount);
    }


    sheet.bind(spreadNS.Events.SelectionChanged, function (e, args) {
        debugger
        var sheet = spread.getActiveSheet();
        var sels = sheet.getSelections();
        var selected = sels[0];
        if (sels && sels.length > 0) {
            if (selected.rowCount === 1) {
                setRowCheck(sheet, selected.row)
            }
            else {
                setRangeCheck(sheet, selected.row, selected.rowCount)
            }

        }
    });
}

QQ图片20180115165806.png

6 个回复

倒序浏览
寒梅落尽
注册会员   /  发表于:2018-1-15 16:57:11
沙发
项目快上线了,现在spreadjs这一块就剩这一个问题了,求指点,感激不尽
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-1-15 18:06:36
板凳
首先您new GC.Spread.Sheets.CheckBoxCellType() 是V9的写法,V10中应该是:
new GC.Spread.Sheets.CellTypes.CheckBox();

另外,如果还有其他问题,您需要提供一个重现问题的demo,我们需要具体调试一下才能知道。
回复 使用道具 举报
寒梅落尽
注册会员   /  发表于:2018-1-15 18:19:10
地板
ClarkPan 发表于 2018-1-15 18:06
首先您new GC.Spread.Sheets.CheckBoxCellType() 是V9的写法,V10中应该是:
new GC.Spread.Sheets.CellTy ...

现在我调整过了   现在点击的时候不会勾选也不会报错 是不是哪里少了点东西
var spreadNS = GC.Spread.Sheets;
    var sheet = spread.getSheet(0);
    sheet.addColumns(0, 1);
    sheet.suspendPaint();
    var c = new spreadNS.CellTypes.CheckBox();
    sheet.setColumnWidth(0, 100);
    sheet.setCellType(0, 0, c, GC.Spread.Sheets.SheetArea.colHeader);
    for (var i = 0; i < spread.getSheet(0).getRowCount() ; i++) {
        sheet.setCellType(i, 0, c);
        c.textAlign(GC.Spread.Sheets.CellTypes.CheckBoxTextAlign.center);
    }
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-1-15 18:22:14
5#
所以需要您直接提供一个demo我们需要调试一下,而不是提供代码, 这样我们没有办法重现问题,就没办法知道哪里错了。
回复 使用道具 举报
寒梅落尽
注册会员   /  发表于:2018-1-15 18:48:13
6#
寒梅落尽 发表于 2018-1-15 18:19
现在我调整过了   现在点击的时候不会勾选也不会报错 是不是哪里少了点东西
var spreadNS = GC.Spread.S ...

不知道怎么从我代码中剥离出来这个demo    我大致讲一下我的整个流程   在已经加载完数据的sheet页增加一列然后重新绘制
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-1-16 10:28:55
7#
您好:

您参考这个demo来改吧,这个是V10以上版本的列头全选功能
http://runjs.cn/code/fkgm3ulw
没有demo我们这边没办法调试,从代码上来看您应该是用V9去改写的V10,但是没有改写完全,所以会报错。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部