找回密码
 立即注册

QQ登录

只需一步,快速开始

Ellia.Duan SpreadJS 开发认证
超级版主   /  发表于:2022-12-28 14:53  /   查看:1834  /  回复:0
本帖最后由 Ellia.Duan 于 2023-12-29 11:20 编辑

SpreadJS目前提供了四种方式去使用下拉框,可以参考这篇文章:
https://gcdn.grapecity.com.cn/showtopic-169429-1-1.html

了解到如何创建下拉框之后,下面总结下下拉框一些使用场景与问题
1、ComboBox自适应下拉框内容
有时候用户发现下拉框内容过长,而列宽不够时,出现遮挡情况。
所以希望可以自适应换行。

  1. var data = {
  2.             items: [
  3.                 {
  4.                     text: 'Orange Orange Orange Orange Orange Orange Orange Orange Orange Orange Orange ',
  5.                     value: 'Orange Orange Orange Orange Orange Orange Orange Orange Orange Orange Orange '
  6.                 },
  7.                 {
  8.                     text: 'Apple',
  9.                     value: 'Apple',
  10.                 },
  11.                 {
  12.                     text: 'Banana',
  13.                     value: 'Banana'
  14.                 }
  15.             ]
  16.         };
  17.         var style = new GC.Spread.Sheets.Style();
  18.         style.wordWrap = true;
  19.         style.cellButtons = [
  20.             {
  21.                 imageType: GC.Spread.Sheets.ButtonImageType.dropdown,
  22.                 command: "openList",
  23.                 useButtonStyle: true,
  24.             }
  25.         ];
  26.         style.dropDowns = [
  27.             {
  28.                 type: GC.Spread.Sheets.DropDownType.list,
  29.                 option: data
  30.             }
  31.         ];
  32.         sheet.setStyle(3, 4, style);
复制代码

执行上述代码后,发现第一项内容过长,如果选中第一项,则出现内容不完整情况,如下图

image.png159762877.png
此时我们可以在ValueChanged事件中,对此行进行高度自适应,如下代码
  1.     sheet.bind(GC.Spread.Sheets.Events.ValueChanged, function (e, info) {
  2.             info.sheet.autoFitRow(info.row)
  3.         });
复制代码
执行后,刷新页面,此时再选中第一项,执行效果如下:
image.png409740294.png

2、ComboBox下拉框数据从后端获取,
有时候用户希望下拉框数据可以异步获取,通过http请求获取下拉框数据资源。
此时可以使用如下代码来实现:
  1. const combo = new spreadNS.CellTypes.ComboBox();
  2.         combo
  3.             .editorValueType(spreadNS.CellTypes.EditorValueType.text);
  4.         sheet.setValue(0, 3, "Result:");
  5.         sheet.getCell(1, 2, spreadNS.SheetArea.viewport).cellType(combo);


  6.         sheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) {
  7.             const {row, col} = args;
  8.             if (row == 1 && col == 2) {
  9.                 let arr = [];
  10.                 $.ajax(
  11.                     {
  12.                         async: false, url: "http://127.0.0.1:3000/list", success: function (result) {
  13.                             result.map(select => {
  14.                                 arr.push( {
  15.                                     text: select.name,
  16.                                     value: select.id,
  17.                                 })
  18.                             })

  19.                             console.log(result);
  20.                             combo.items(arr);
  21.                         }
  22.                     });
  23.             }

  24.         });
复制代码



3、ComboBox下拉框允许修改,且修改后变为下拉框值的一部分
  1. const combo = new spreadNS.CellTypes.ComboBox();
  2.         combo
  3.             .editorValueType(spreadNS.CellTypes.EditorValueType.text);
  4.         combo.editable(true);
  5.         combo.items([{text: 'orange', value: 'orange'}])
  6.         sheet.setValue(0, 3, "Result:");
  7.         sheet.getCell(1, 2, spreadNS.SheetArea.viewport).cellType(combo);


  8.         sheet.bind(GC.Spread.Sheets.Events.ValueChanged, function (e, info) {
  9.             const row = info.row, col = info.col;
  10.             let currentValue = sheet.getValue(row, col)
  11.             var cellType = sheet.getCellType(row, col);
  12.             var items = cellType.items();
  13.             if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {
  14.                 if (items.length > 0) {
  15.                     let result = false;
  16.                     items.forEach(item => {if (item.text == currentValue) result = true;});
  17.                     if (!result) {
  18.                         items.push({text: currentValue, value: items})
  19.                     }
  20.                 } else {
  21.                     items.push({text: currentValue, value: items})
  22.                 }

  23.             }
  24.         });
复制代码


4、下拉框模糊搜索
https://gcdn.grapecity.com.cn/showtopic-131931-1-1.html

5、下拉框 根据值绑定,修改对应区域的值
https://gcdn.grapecity.com.cn/fo ... 5680&extra=page%3D2

6、ComboBox设置背景色
有用户发现为单元格设置背景色如黄色,随之下拉框也出现黄色,如下图所示:
image.png374421996.png
此时如果不希望下拉组件保持原来的白色背景,可以加这么几行代码:
  1. div[gcuielement="gcDropDownWindow"]{
  2.         background-color: white !important;
  3.     }
复制代码

7、List 修改样式
可以参考这篇文章:https://gcdn.grapecity.com.cn/showtopic-139216-1-19.html

















下拉框输入值后 变为其中的一个选项.html

2.11 KB, 下载次数: 55

下拉框选项从后端获取.html

2.33 KB, 下载次数: 52

select_autoFitRow.html

2.11 KB, 下载次数: 55

0 个回复

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