列表框表单控件

SpreadJS 支持在工作表中添加列表框表单控件,用户可以从预定义的选项列表中选择一个或多个项目。列表框可以绑定数据源区域,支持单选和多选模式,并将用户选择的项目索引自动同步到关联单元格,适用于数据筛选、选项配置等场景。

概述 本 Demo 展示了如何在工作表中添加列表框表单控件,并配置其数据源、关联单元格和选择模式。Demo 中创建了一个包含 14 个选项的列表框,设置为单选模式,并将用户选择的项目索引自动同步到指定单元格。 实现思路 在工作表的 A 列准备列表项数据(A1:A14) 使用 addFormControl 方法添加列表框表单控件 通过 options 方法配置列表框属性:设置输入范围、关联单元格和选择类型 使用 value 方法设置默认选中项 绑定 FormControlValueChanged 事件,监听用户选择变化 代码解析 准备数据源 这段代码为列表框准备数据源,在 A 列的第 0-13 行填入 "A1" 到 "A14" 共 14 个选项。 添加列表框控件 使用 addFormControl 方法创建列表框控件。参数依次为:控件名称、控件类型、左侧位置、顶部位置、宽度、高度。FormControlType.listBox 指定创建的是列表框类型的表单控件。 配置列表框属性 通过 options 方法获取列表框的配置对象,然后设置关键属性: inputRange:指定列表项的数据来源区域 cellLink:指定关联单元格,列表框的选中项索引会自动写入该单元格 selectionType:设置选择模式为单选(single) 设置默认选中项 调用 value 方法设置默认选中第 3 个项目(索引从 0 开始,值为 2 表示第 3 项)。此时 C1 单元格的值也会自动更新为 2。 监听值变更事件 绑定 FormControlValueChanged 事件,当用户在列表框中选择不同项目时,事件处理函数会接收到新值并输出到控制台。 运行效果 工作表中显示一个列表框控件,包含 14 个选项(A1 到 A14) 默认选中第 3 个项目(A3) C1 单元格显示当前选中项的索引值(初始为 2) 点击列表框中的其他项目时,C1 单元格的值会自动更新为新选中项的索引 控制台输出值变更信息,显示新选中的项目索引 API 参考 addFormControl 方法 向工作表添加表单控件形状。 name:控件名称 formControlType:表单控件类型,使用 GC.Spread.Sheets.Shapes.FormControlType.listBox 创建列表框 left:左侧位置(可选) top:顶部位置(可选) width:宽度(可选) height:高度(可选) options 方法 获取或设置列表框的配置选项。 IListBoxFormControlOptions 接口 inputRange:列表项数据源的区域字符串 cellLink:关联单元格地址,选中项索引会写入该单元格 selectionType:选择类型,使用 GC.Spread.Sheets.Shapes.ListBoxSelectionType 枚举(single、multi、extend) value 方法 获取或设置列表框的当前值(选中项的索引)。 FormControlValueChanged 事件 当表单控件的值发生改变时触发。 args.newValue:新值 args.oldValue:旧值
window.onload = function () { var workbook = new GC.Spread.Sheets.Workbook(document.getElementById("ss")); workbook.suspendPaint(); initSheet1(workbook.getSheet(0)); workbook.resumePaint(); }; function initSheet1(sheet) { for (var i = 0; i < 14; i++) { sheet.setValue(i, 0, "A" + (i + 1)); } var listBox = sheet.shapes.addFormControl("list box", GC.Spread.Sheets.Shapes.FormControlType.listBox, 100, 50, 200, 150); var options = listBox.options(); options.inputRange = "A1:A14"; options.cellLink = "C1"; options.selectionType = GC.Spread.Sheets.Shapes.ListBoxSelectionType.single; listBox.options(options); listBox.value(2); sheet.bind(GC.Spread.Sheets.Events.FormControlValueChanged, function (s, args) { console.log("value changed...", args.newValue); }); }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta name="spreadjs culture" content="zh-cn" /> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-resources-zh/dist/gc.spread.sheets.resources.zh.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-shapes/dist/gc.spread.sheets.shapes.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" class="sample-spreadsheets"></div> </div> </body> </html>
input[type="text"] { width: 200px; margin-right: 20px; } label { display: inline-block; width: 110px; } .sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: 100%; height: 100%; overflow: hidden; float: left; } label { display: block; margin-bottom: 6px; } input { padding: 4px 6px; } input[type=button] { margin-top: 6px; display: block; width:216px; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } code { border: 1px solid #000; }