DirectSurface UIDirectSurface UI
开始使用
文档/示例项目

示例:可编辑表格

LIVE CANVAS可运行组件示例
ON-DEMAND RUNTIME交互式示例将在进入视区时启动避免文档首屏同时初始化多个 Canvas Runtime
import { RenderDataGrid, RenderStackPanel, RenderToolbar } from 'ds-ui'

可编辑表格适合维护明细行、配置项、字典项和录入清单。核心难点不是让单元格能输入,而是处理校验、提交、撤销、权限和大数据性能。

页面结构

StackPanel vertical
  工具栏
  DataGrid flex=1
  状态栏

表格本身负责单元格编辑、选中和复制。页面负责数据源、校验结果和提交动作。

数字列进入编辑状态后会显示上下步进按钮,也可以使用 ArrowUpArrowDownstep 调整当前草稿。按钮和最终提交共用 decimalsminmax 归一化规则,步进过程不会直接提交业务数据。

基本结构

const grid = new RenderDataGrid({  columns: [    { key: 'name', title: '项目', type: 'text', width: 180 },    { key: 'value', title: '值', type: 'number', width: 160, step: 0.5, decimals: 1 },    { key: 'enabled', title: '启用', type: 'checkbox', width: 80 },  ],  rows: data,  editable: true,}) const page = new RenderStackPanel({  orientation: 'vertical',  spacing: 8,  crossAxisAlignment: 'stretch',})page.addChild(new RenderToolbar({ groups: [] }))page.addChild(grid, 1)

编辑模型

推荐把编辑状态放在页面层:

  • 原始数据。
  • 当前草稿行。
  • 新增行集合。
  • 修改行集合。
  • 删除行集合。
  • 单元格校验错误。

提交时由页面层把变化集合转换为业务请求。不要让每个单元格直接调用后端服务。

常用命令

  • 新增行。
  • 删除行。
  • 保存修改。
  • 撤销当前行。
  • 复制当前单元格或选中行。
  • 导入或导出。

删除、撤销、保存这些命令要结合权限和编辑状态判断启用。

校验策略

校验应该支持两级:

  • 单元格级:必填、长度、格式。
  • 行级:字段组合规则,例如开始时间不能晚于结束时间。

校验结果要能定位到具体行列,方便表格绘制错误状态或 tooltip。

性能注意

大表格编辑要避免每次输入都重建全部 rows。推荐只更新变化行,或者让数据模型保持稳定行对象。

如果需要批量粘贴大量行,应走批处理路径,避免每个单元格都触发一次布局和命令刷新。