找回密码
 立即注册

QQ登录

只需一步,快速开始

life()

初级会员

38

主题

131

帖子

417

积分

初级会员

积分
417
life()
初级会员   /  发表于:2024-3-22 11:46  /   查看:1759  /  回复:7
50金币
想实现这样一个需求,但是没有头绪,希望能指点一二:

image.png77131957.png
如图,当插入行或者列的时候,循环这一行或者列,如果这一行或者这一列的单元格是有某个标识的(比如tag参数里携带了isProhibit参数为true),则禁止本次插入行或者列的操作。

最佳答案

查看完整内容

您好,用事件也是可以的,使用RowChanging和ColumnChanging这两个事件来实现: https://demo.grapecity.com.cn/sp ... ents#columnchanging https://demo.grapecity.com.cn/sp ... .Events#rowchanging 在需要取消插入时,将cancel置为true即可。

7 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-3-22 11:46:23
来自 4#
您好,用事件也是可以的,使用RowChanging和ColumnChanging这两个事件来实现:

https://demo.grapecity.com.cn/sp ... ents#columnchanging
https://demo.grapecity.com.cn/sp ... .Events#rowchanging

在需要取消插入时,将cancel置为true即可。
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-3-22 14:00:56
2#
您好,可以通过重写Command来实现这个需求,以下是一个简单的例子:

  1. let insertRowCheckTag = {
  2.   canUndo: true,
  3.   name: "insertRowCheckTag",
  4.   execute: function (context, options, isUndo) {
  5.     var Commands = GC.Spread.Sheets.Commands;
  6.     if (isUndo) {
  7.       Commands.undoTransaction(context, options);
  8.       return true;
  9.     } else {
  10.       let sheet = context.getSheetFromName(options.sheetName);
  11.       let selection = sheet.getSelections()[0];
  12.       let rowIndex = selection.row;
  13.       let columnCount = sheet.getColumnCount();
  14.       for (let i = 0; i < columnCount; i++) {
  15.         let tag = sheet.getTag(rowIndex, i);
  16.         if (tag) {
  17.           console.log("tag exist, cannot add row");
  18.           return false;
  19.         }
  20.       }

  21.       Commands.startTransaction(context, options);
  22.       sheet.addRows(rowIndex, 1)
  23.       Commands.endTransaction(context, options);
  24.       return true;
  25.     }
  26.   },
  27. };

  28. spread.commandManager().register("insertRowCheckTag", insertRowCheckTag);

  29. let oldOpenMenu = spread.contextMenu.onOpenMenu;
  30. spread.contextMenu.onOpenMenu = function (
  31.   menuData,
  32.   itemsDataForShown,
  33.   hitInfo,
  34.   spread
  35. ) {
  36.   oldOpenMenu.apply(this, arguments);

  37.   itemsDataForShown.forEach(function (item, index) {
  38.     if (item && item.name === "gc.spread.contextMenu.insertRows") {
  39.       item.command = "insertRowCheckTag";
  40.     }
  41.   });
  42. };
复制代码
回复 使用道具 举报
life()
初级会员   /  发表于:2024-3-22 14:31:29
3#
Joestar.Xu 发表于 2024-3-22 14:00
您好,可以通过重写Command来实现这个需求,以下是一个简单的例子:

你好,不能像编辑事件一样阻止吗?

image.png741714172.png


回复 使用道具 举报
life()
初级会员   /  发表于:2024-3-22 15:04:50
5#
Joestar.Xu 发表于 2024-3-22 14:39
您好,用事件也是可以的,使用RowChanging和ColumnChanging这两个事件来实现:

https://demo.grapecity. ...

老师我这边试了下没有阻止成功,仍然可以删除行,是我写的有问题吗?
image.png821172790.png
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-3-22 15:07:06
6#
您好,请注意是RowChanging事件,不是RowChanged事件。
回复 使用道具 举报
life()
初级会员   /  发表于:2024-3-22 15:11:44
7#
Joestar.Xu 发表于 2024-3-22 15:07
您好,请注意是RowChanging事件,不是RowChanged事件。

不好意思,我的问题,这边已经成功阻止了,谢谢!
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-3-22 15:12:55
8#
不客气,那就先结贴了,后续有其他问题的话随时开新帖提问哈。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部