SpreadJS单元格数据绑定

发布时间:2015/12/07 00:12 发布者:frank.zhang

返回博客中心

SpreadJS是一个JavaScript的电子表格和网格功能控件。用于显示和管理类似Excel的数据。SpreadJS使用Json作为加载数据的方式。本文主要介绍通过SpreadJS单元格数据绑定。

1.初始化Spread

            var spread = new GcSpread.Sheets.Spread($("#ss")[0], { sheetCount: 2 });
            var sheet = spread.getActiveSheet();
            var sourceFormRow = -1;
            var sourceFormCol = -1;
            var sourceFormSheet = spread.getSheet(0);
            spread.newTabVisible(false);
            spread.highlightInvalidData(true);
            //cell:0 row:1 column:2
            sheet.selectionUnit(1);
            sheet.allowEditorReservedLocations(true);
            initDataSourceBind(spread.getSheet(0));
            initCellLevelBind(spread.getSheet(1));
            sheet.getColumn(0).visible(false);
            sheet.getColumn(7).visible(false);
            sheet.setIsProtected(true);
            sheet.getColumn(sheet.getColumnCount() - 1).locked(false);
            sheet.getColumn(sheet.getColumnCount() - 2).locked(false);

 

2.绑定按钮

            spread.bind(GcSpread.Sheets.Events.ButtonClicked, function (e, args)
            {
                var clickSheet = args.sheet;
                var clickRow = args.row;
                var clickCol = args.col;
                var cellType = clickSheet.getCellType(clickRow, clickCol);
                if (clickSheet.getName() == "SourceForm")
                {
                    if (cellType instanceof GcSpread.Sheets.ButtonCellType)
                    {
                        sourceFormRow = clickRow;
                        sourceFormCol = clickCol;
                        if (args.col === (clickSheet.getColumnCount() - 2))
                        {
                            var result = confirm("Are you sure you want to delete this record", "OK", "Cancel");
                            if (result)
                            {
                                clickSheet.deleteRows(clickSheet.getActiveRowIndex(), 1);
                                if (clickSheet.isEditing())
                                {
                                    clickSheet.endEdit();
                                }
                            }
                        }
                        if (args.col === clickSheet.getColumnCount() - 1)
                        {
                            var clickItem = clickSheet.getDataSource()[clickRow];
                            _dummySource.id = clickItem.id;
                            _dummySource.name = clickItem.name;
                            _dummySource.line = clickItem.line;
                            _dummySource.color = clickItem.color;
                            _dummySource.price = clickItem.price;
                            _dummySource.cost = clickItem.cost;
                            _dummySource.weight = clickItem.weight;
                            _dummySource.discontinued = clickItem.discontinued;
                            _dummySource.rating = clickItem.rating;
                            _dummySource.dataIndex = clickRow;
                            var detialFormSheet = args.sheet.parent.getSheet(1);
                            detialFormSheet.setDataSource(new GcSpread.Sheets.CellBindingSource(_dummySource));
                            args.sheet.parent.setActiveSheetIndex(1);
                        }
                    }
                }
                if (clickSheet.getName() == "DetialForm")
                {
                    if (cellType instanceof GcSpread.Sheets.ButtonCellType)
                    {
                        if (sourceFormRow == -1)
                        {
                            alert("Please Input Valid Data");
                            return -1;
                        }
                        else
                        {
                            var updateItem = sourceFormSheet.getDataSource()[sourceFormRow];
                            updateItem.id = _dummySource.id;
                            updateItem.name = _dummySource.name;
                            updateItem.line = _dummySource.line;
                            updateItem.color = _dummySource.color;
                            updateItem.price = _dummySource.price;
                            updateItem.cost = _dummySource.cost;
                            updateItem.weight = _dummySource.weight;
                            updateItem.discontinued = _dummySource.discontinued;
                            updateItem.rating = _dummySource.rating;
                            args.sheet.parent.setActiveSheetIndex(0);
                        }
                    }
                }
            });

 

3.初始化Source

        function initDataSourceBind(sheet)
        {
            sheet.isPaintSuspended(true);
            sheet.setName("SourceForm");
            sheet.autoGenerateColumns = false;
            sheet.setDataSource(getProducts(100));
            var lineCellType = new GcSpread.Sheets.ComboBoxCellType();
            lineCellType.items(_lines);
            var colorCellType = new GcSpread.Sheets.ComboBoxCellType();
            colorCellType.items(_colors);
            var checkBoxCellType = new GcSpread.Sheets.CheckBoxCellType();
            var ratingCellType = new GcSpread.Sheets.ComboBoxCellType();
            ratingCellType.items(_ratings);
            var cis = [
                { name: "id", displayName: "ID", size: 25 },
                { name: "name", displayName: "Name", size: 100 },
                { name: "line", displayName: "Line", cellType: lineCellType, size: 80 },
                { name: "color", displayName: "Color", cellType: colorCellType },
                { name: "price", displayName: "Price", formatter: "0.00" },
                { name: "cost", displayName: "Cost", formatter: "0.00" },
                { name: "weight", displayName: "Weight", formatter: "0.00" },
                { name: "discontinued", displayName: "Discontinued", cellType: checkBoxCellType, size: 80 },
                { name: "rating", displayName: "Rating", cellType: ratingCellType }
            ];
            sheet.bindColumns(cis);
            sheet.getColumn(7).hAlign(GcSpread.Sheets.HorizontalAlign.center)
                .vAlign(GcSpread.Sheets.VerticalAlign.center);
            sheet.defaults.rowHeight = 23;
            var columnCount = sheet.getColumnCount();
            sheet.addColumns(columnCount, 2);
            var deleteCellType = new GcSpread.Sheets.ButtonCellType();
            deleteCellType.marginTop(4).marginRight(4).marginBottom(4).marginLeft(4);
            deleteCellType.text("Delete");
            sheet.getColumn(columnCount).cellType(deleteCellType).hAlign(GcSpread.Sheets.HorizontalAlign.center).vAlign(GcSpread.Sheets.VerticalAlign.center);
            sheet.setValue(0, columnCount, "", GcSpread.Sheets.SheetArea.colHeader);
            var showDetialCellType = new GcSpread.Sheets.ButtonCellType();
            showDetialCellType.marginTop(4).marginRight(4).marginBottom(4).marginLeft(4);
            showDetialCellType.text("Detial");
            sheet.getColumn(columnCount + 1).cellType(showDetialCellType).hAlign(GcSpread.Sheets.HorizontalAlign.center).vAlign(GcSpread.Sheets.VerticalAlign.center);
            sheet.setValue(0, columnCount + 1, "", GcSpread.Sheets.SheetArea.colHeader);
            //set SourceForm column's width and the header's height
            for (var i = 1; i < sheet.getColumnCount() - 2; i++)
            {
                sheet.setColumnWidth(i, 80);
            }
            sheet.setColumnWidth(1, 110);
            sheet.setColumnWidth(2, 90);
            sheet.setRowHeight(0, 40, GcSpread.Sheets.SheetArea.colHeader);
            sheet.isPaintSuspended(false);
        }

 

4.初始化CellLevel

        function initCellLevelBind(sheet)
        {
            sheet.isPaintSuspended(true);
            sheet.setName("DetialForm");
            sheet.setColumnWidth(1, 90);
            sheet.setColumnWidth(2, 100);
            sheet.setColumnWidth(3, 90);
            sheet.setColumnWidth(4, 100);
            sheet.setColumnWidth(5, 100);
            sheet.setColumnWidth(6, 100);
            sheet.setRowHeight(6, 40);
            sheet.setRowHeight(14, 30);
            sheet.addSpan(6, 1, 1, 2);
            sheet.addSpan(6, 3, 1, 2);
            sheet.addSpan(6, 5, 1, 2);
            sheet.setGridlineOptions({ showVerticalGridline: false, showHorizontalGridline: false });
            sheet.canUserDragDrop(false);
            sheet.canUserDragFill(false);
            //set border of the area which can be edited
            for (var i = 0; i < 5; i += 2)
            {
                for (var j = 0; j < 4; j++)
                {
                    var range_1 = new GcSpread.Sheets.Range(7 + j, 2 + i, 1, 1);
                    if (i + 2 == 6)
                    {
                        sheet.setBorder(range_1, new GcSpread.Sheets.LineBorder("rgb(216,216,216)", GcSpread.Sheets.LineStyle.thin), { right: true, bottom: true }, 3);
                    }
                    sheet.setBorder(range_1, new GcSpread.Sheets.LineBorder("rgb(216,216,216)", GcSpread.Sheets.LineStyle.thin), { bottom: true }, 3);
                }
            }
            sheet.getCell(6, 1).value("Product Info").font("bold 15pt Courier New").vAlign(GcSpread.Sheets.VerticalAlign.center).hAlign(GcSpread.Sheets.HorizontalAlign.center).foreColor("white").backColor("rgb(182,134,218)");
            sheet.getCell(6, 3).value("Market Info").font("bold 15pt Courier New").vAlign(GcSpread.Sheets.VerticalAlign.center).hAlign(GcSpread.Sheets.HorizontalAlign.center).foreColor("white").backColor("rgb(182,134,218)");
            sheet.getCell(6, 5).value("Status").font("bold 15pt Courier New").vAlign(GcSpread.Sheets.VerticalAlign.center).hAlign(GcSpread.Sheets.HorizontalAlign.center).foreColor("white").backColor("rgb(182,134,218)");
            sheet.getCells(7, 1, 10, 1).font("bold 10pt Courier New").foreColor("rgb(64,64,64)").backColor("rgb(216,216,216)").vAlign(GcSpread.Sheets.VerticalAlign.center).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.getCells(7, 3, 10, 3).font("bold 10pt Courier New").foreColor("rgb(64,64,64)").backColor("rgb(216,216,216)").vAlign(GcSpread.Sheets.VerticalAlign.center).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.getCells(7, 5, 10, 5).font("bold 10pt Courier New").foreColor("rgb(64,64,64)").backColor("rgb(216,216,216)").vAlign(GcSpread.Sheets.VerticalAlign.center).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.getCells(11, 1, 11, 6).backColor("rgb(182,134,218)");
            sheet.setValue(7, 1, "Name", GcSpread.Sheets.SheetArea.viewport);
            sheet.setValue(8, 1, "Line", GcSpread.Sheets.SheetArea.viewport);
            sheet.setValue(9, 1, "Color", GcSpread.Sheets.SheetArea.viewport);
            sheet.setValue(7, 3, "Price", GcSpread.Sheets.SheetArea.viewport);
            sheet.setValue(8, 3, "Cost", GcSpread.Sheets.SheetArea.viewport);
            sheet.setValue(9, 3, "Weight", GcSpread.Sheets.SheetArea.viewport);
            sheet.setValue(7, 5, "Discontinued", GcSpread.Sheets.SheetArea.viewport);
            sheet.setValue(8, 5, "Rating", GcSpread.Sheets.SheetArea.viewport);
            var dv1 = new GcSpread.Sheets.DefaultDataValidator.createNumberValidator(GcSpread.Sheets.ComparisonOperator.GreaterThan, 0);
            sheet.setDataValidator(7, 4, dv1);
            sheet.setDataValidator(8, 4, dv1);
            sheet.setDataValidator(9, 4, dv1);
            var lineCellType = new GcSpread.Sheets.ComboBoxCellType();
            lineCellType.items(_lines);
            var colorCellType = new GcSpread.Sheets.ComboBoxCellType();
            colorCellType.items(_colors);
            var checkBoxCellType = new GcSpread.Sheets.CheckBoxCellType();
            var ratingCellType = new GcSpread.Sheets.ComboBoxCellType();
            ratingCellType.items(_ratings);
            sheet.getCell(7, 2).bindingPath("name");
            sheet.getCell(8, 2).bindingPath("line").cellType(lineCellType);
            sheet.getCell(9, 2).bindingPath("color").cellType(colorCellType);
            sheet.getCell(7, 4).bindingPath("price");
            sheet.getCell(8, 4).bindingPath("cost");
            sheet.getCell(9, 4).bindingPath("weight");
            sheet.getCell(7, 6).bindingPath("discontinued").cellType(checkBoxCellType);
            sheet.getCell(8, 6).bindingPath("rating").cellType(ratingCellType);
            var updateCellType = new GcSpread.Sheets.ButtonCellType();
            updateCellType.text("Update");
            sheet.getCell(14, 6).cellType(updateCellType).hAlign(GcSpread.Sheets.HorizontalAlign.center).vAlign(GcSpread.Sheets.VerticalAlign.center);
            sheet.isPaintSuspended(false);
        }

 

运行截图:

2015-12-07_110618

2015-12-07_110626

示例下载:

这就是你想要的SpreadJS,快来官网了解并下载它吧!


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网