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

QQ登录

只需一步,快速开始

SuperArilete

注册会员

2

主题

11

帖子

23

积分

注册会员

积分
23
最新发帖
SuperArilete
注册会员   /  发表于:2024-9-27 16:02  /   查看:178  /  回复:9
1金币
image.png223148497.png image.png723345031.png 想实现只能勾选不能编辑功能

最佳答案

查看完整内容

您好!您使用的是单元格类型CheckBox吧?那么,可以监听EditStarting事件,判断当前编辑的单元格中的单元格类型是否为CheckBox,如果是则通过args.cancel禁止对其进行编辑。参考如下代码:

9 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2024-9-27 16:02:37
来自 2#
您好!您使用的是单元格类型CheckBox吧?那么,可以监听EditStarting事件,判断当前编辑的单元格中的单元格类型是否为CheckBox,如果是则通过args.cancel禁止对其进行编辑。参考如下代码:
  1. sheet.bind(GC.Spread.Sheets.Events.EditStarting, function(e, args) {
  2.     if (sheet.getCellType(args.row, args.col) instanceof GC.Spread.Sheets.CellTypes.CheckBox) {
  3.         args.cancel = true;
  4.     }
  5. });
复制代码


回复 使用道具 举报
SuperArilete
注册会员   /  发表于:2024-9-29 10:48:13
3#
Wilson.Zhang 发表于 2024-9-27 17:11
您好!您使用的是单元格类型CheckBox吧?那么,可以监听EditStarting事件,判断当前编辑的单元格中的单元格 ...

你好,这个并不生效,双击会进入编辑状态如图一,想要实现只能在图二状态下勾选,不能双击编辑
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-29 13:54:40
4#
SuperArilete 发表于 2024-9-29 10:48
你好,这个并不生效,双击会进入编辑状态如图一,想要实现只能在图二状态下勾选,不能双击编辑

您好!根据您的描述,我们在12.2.5和最新的17.1.6版本都测试过代码,对于设置了CheckBo单元格类型的单元格,对其单击或双击都不会进入编辑状态。如下动图所示是12.2.5版本的测试现象,我们将demo附上,您可以运行demo测验。如果我们的理解与您的需求有所偏差,需要您详细介绍下。

12.2.5 CheckBox单元格禁止编辑.gif

12.2.5 CheckBox forbidden edit demo.zip

1.66 MB, 下载次数: 0

回复 使用道具 举报
SuperArilete
注册会员   /  发表于:2024-9-29 14:25:00
5#
Wilson.Zhang 发表于 2024-9-29 13:54
您好!根据您的描述,我们在12.2.5和最新的17.1.6版本都测试过代码,对于设置了CheckBo单元格类型的单元 ...

image.png444816893.png image.png658207091.png Image_20240929142321.png940844116.png
经查看,复选框为自定义,代码如上,如何才能让其不可编辑
image.png258043822.png
image.png405691832.png
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-29 15:47:14
6#
本帖最后由 Wilson.Zhang 于 2024-9-29 17:32 编辑
SuperArilete 发表于 2024-9-29 14:25
经查看,复选框为自定义,代码如上,如何才能让其不可编辑

从您提供的代码片段来看,自定义的HeaderCheckBoxCellType的prototype是SpreadJS内置的CheckBox单元格类型,对于您在单元格中设置的HeaderCheckBoxCellType,其通过原型链也属于CheckBox类型的对象。因此,我们提供的方案同样适用。即,可以保留判断条件为
  1. sheet.getCellType(args.row, args.col) instanceof GC.Spread.Sheets.CellTypes.CheckBox
复制代码
也可以修改为
  1. sheet.getCellType(args.row, args.col) instanceof HeaderCheckBoxCellType
复制代码

参照您图示中的代码片段,我们复刻了HeaderCheckBoxCellType的基本定义,测试发现方案依然可行。

您可以将您的代码片段粘贴至提供给您的demo中测验,如果现象依然存在,需要您提供一个能够复现问题的可运行demo。

回复 使用道具 举报
SuperArilete
注册会员   /  发表于:2024-9-29 16:23:35
7#
Wilson.Zhang 发表于 2024-9-29 15:47
从您提供的代码片段来看,自定义的HeaderCheckBoxCellType的prototype是SpreadJS内置的CheckBox单元格类 ...

因公司代码实行加密处理,无法直接发送源码

image.png979667053.png Image_20240929162252.png764917297.png
由图可知,逻辑判断并无问题,但仍旧可编辑
image.png621045837.png
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-29 16:56:52
8#
SuperArilete 发表于 2024-9-29 16:23
因公司代码实行加密处理,无法直接发送源码

了解您的开发环境了,从您提供的图示代码片段中了解到您使用的监听事件是EditStarted。对于您的需求,我们推荐适用EditStarting事件,这个事件将在光标进入单元格首次点击时触发。

想象一下,光标当前点击的是CheckBox或HeaderCheckBoxCellType单元格,SpreadJS的EditStarting事件监听到动作,判断动作发生地单元格中的单元格类型是否为上述两种类型,如果是则通过设置args.cancel为true以禁止继续执行原有动作,即产生了拦截效果。

而EditStarted发生在单元格编辑结束,此时都已结束,拦截自然无效。
回复 使用道具 举报
SuperArilete
注册会员   /  发表于:2024-9-29 17:25:44
9#
Wilson.Zhang 发表于 2024-9-29 16:56
了解您的开发环境了,从您提供的图示代码片段中了解到您使用的监听事件是EditStarted。对于您的需求,我 ...

解决了,EditStarting看成了EditStarted,没注意,不好意思
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-29 17:33:27
10#
SuperArilete 发表于 2024-9-29 17:25
解决了,EditStarting看成了EditStarted,没注意,不好意思

解决了就好,没关系。如有问题,欢迎发新帖沟通。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部