找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

141

主题

261

帖子

1682

积分

超级版主

Rank: 8Rank: 8

积分
1682
Winny
超级版主   /  发表于:2021-12-16 18:02  /   查看:2418  /  回复:0
本帖最后由 Winny 于 2021-12-27 18:19 编辑

在用户实际需求中,根据权限,要隐藏表格(Table)的特定列。但SpreadJS目前对于列可见性的设置只提供整列设置可见性,如:sheet.getCell(-1, 0).visible(false);
上述代码用来设置表单第一列不可见。但该API无法设置某一行或某一列的局部区域不可见。

本文提供了一种设置表格某一列不可见的实现方式,具体方案如下:
1. 创建所有列数组和临时列数组;
  1. let colsInfo = []                 //所有列
  2. let tempInfo = []               //临时列

  3. function generateCol(empCol){
  4.     let column1 = new GC.Spread.Sheets.Tables.TableColumn(1,'orderDate','订单日期')
  5.     empCol.push(column1)

  6.     let column2 = new GC.Spread.Sheets.Tables.TableColumn(2,'item','明细',)
  7.     empCol.push(column2)
  8.    
  9.     let column3 = new GC.Spread.Sheets.Tables.TableColumn(3,'cost','金额','$#,##0.00')
  10.     empCol.push(column3)

  11.     let checkBox = new GC.Spread.Sheets.CellTypes.CheckBox()
  12.     checkBox.textTrue('是')
  13.     checkBox.textFalse('否')
  14.     let column4 = new GC.Spread.Sheets.Tables.TableColumn(4,'isCash','是否现金',null,checkBox,'isCash')
  15.     empCol.push(column4)
  16.    
  17.     return empCol
  18. }

  19. colsInfo = generateCol(colsInfo)
  20. tempInfo = generateCol(tempInfo)
复制代码
2. 创建表格,初始绑定所有列;
  1. let table = sheet.tables.add('table01',1,1,4,4,GC.Spread.Sheets.Tables.TableThemes.light1);
  2. table.bindColumns(colsInfo)
复制代码
3. 创建隐藏某一列按钮,点击按钮时在临时列中删除对应列;
  1. spread.bind(GC.Spread.Sheets.Events.ButtonClicked,function(s,e){
  2.     let {row,col,sheet} = e
  3.     let deleteCol = sheet.getCell(row,col).value()
  4.     sheet.suspendPaint()
  5.     if(deleteCol!=='reset'){
  6.         let index = findColIndex(deleteCol)
  7.         if(index > -1){
  8.             tempInfo.splice(index,1)
  9.             let table = sheet.tables.findByName('table01')
  10.             let range = table.range()
  11.             sheet.tables.remove(table);
  12.             let newTable = sheet.tables.add('table01',range.row,range.col,range.rowCount,tempInfo.length,GC.Spread.Sheets.Tables.TableThemes.light1)
  13.             newTable.bindColumns(tempInfo)
  14.         }
  15.     }else{
  16.             let table = sheet.tables.findByName('table01')
  17.             let range = table.range()
  18.             sheet.tables.remove(table);
  19.             let newTable = sheet.tables.add('table01',range.row,range.col,range.rowCount,colsInfo.length,GC.Spread.Sheets.Tables.TableThemes.light1)
  20.             newTable.bindColumns(colsInfo)
  21.             tempInfo = generateCol([])
  22.     }
  23.     sheet.resumePaint()
  24. })

  25. function findColIndex(deleteCol){
  26.     let index = -1
  27.     for(let i = 0;i<tempInfo.length;i++){
  28.         if(tempInfo[i].dataField()==deleteCol){
  29.             return i
  30.         }
  31.     }
  32.     return index
  33. }
复制代码

demo演示地址:https://jscodemine.grapecity.com/share/xZjphOykbU2p7_kIzvIInw/
演示项目服务器在国外,因此访问较慢,可以耐心等待一会。
demo演示动图见文章末尾。

tablecolumn.gif

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部