You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DevExtreme DataGrid:仅在添加弹窗显示字段,编辑弹窗隐藏

实现Angular 5中DevExtreme DataGrid弹窗添加显示Staff、编辑隐藏的方案

这个需求其实很常见,DevExtreme的DataGrid提供了几种优雅的方式来实现,我给你两种可行的方案,你可以根据自己的代码习惯选择:

方案一:通过表单配置结合状态变量控制

这种方式通过追踪当前弹窗是新增还是编辑状态,直接在表单项里控制可见性,逻辑清晰直观。

步骤1:在组件中定义状态变量

先在你的组件类里添加一个变量,用来标记当前是否是新增行:

isNewRow = false;

步骤2:修改DataGrid模板配置

在DataGrid的编辑弹窗表单中,为Staff字段的表单项绑定可见性,同时通过onInitNewRow和onEditingStart事件更新状态变量:

<dx-data-grid [dataSource]="yourDataSource" ...>
  <!-- 保持原有的不可见列配置 -->
  <dxi-column dataField="Staff" [visible]="false"></dxi-column>

  <dxo-editing
    mode="popup"
    [allowUpdating]="true"
    [allowAdding]="true"
    [allowDeleting]="true">
    <dxo-popup title="员工信息" [width]="550" [height]="350"></dxo-popup>
    <!-- 自定义弹窗表单 -->
    <dxo-form>
      <!-- 仅在新增时显示Staff字段 -->
      <dxi-item dataField="Staff" [visible]="isNewRow"></dxi-item>
      <!-- 其他需要显示的字段 -->
      <dxi-item dataField="Name"></dxi-item>
      <dxi-item dataField="Department"></dxi-item>
    </dxo-form>
  </dxo-editing>

  <!-- 绑定新增行事件 -->
  <dxo-on-init-new-row>
    <dx-event-handler [handler]="onInitNewRow"></dx-event-handler>
  </dxo-on-init-new-row>
  <!-- 绑定编辑开始事件 -->
  <dxo-on-editing-start>
    <dx-event-handler [handler]="onEditingStart"></dx-event-handler>
  </dxo-on-editing-start>
</dx-data-grid>

步骤3:实现事件处理函数

在组件类中添加两个事件处理函数,更新状态变量:

onInitNewRow() {
  // 新增行时标记为true
  this.isNewRow = true;
}

onEditingStart(e) {
  // 编辑现有行时标记为false
  this.isNewRow = false;
}

方案二:通过onEditorPreparing事件动态控制

这种方式更简洁,不需要额外的状态变量,直接在编辑器准备阶段判断是否需要渲染Staff字段:

修改DataGrid模板配置

绑定onEditorPreparing事件:

<dx-data-grid [dataSource]="yourDataSource" ...>
  <dxi-column dataField="Staff" [visible]="false"></dxi-column>

  <dxo-editing
    mode="popup"
    [allowUpdating]="true"
    [allowAdding]="true">
    <dxo-popup title="员工信息" [width]="550" [height]="350"></dxo-popup>
  </dxo-editing>

  <!-- 绑定编辑器准备事件 -->
  <dxo-on-editor-preparing>
    <dx-event-handler [handler]="onEditorPreparing"></dx-event-handler>
  </dxo-on-editor-preparing>
</dx-data-grid>

实现事件处理函数

在组件类中编写处理逻辑,判断当前字段是Staff且不是新增行时,取消编辑器的渲染:

onEditorPreparing(e) {
  // 检查当前字段是Staff,并且不是新增行
  if (e.dataField === 'Staff' && !e.row.isNewRow) {
    e.cancel = true; // 取消编辑器渲染,即隐藏该字段
  }
}

两种方案都能实现你的需求,方案一适合需要自定义整个表单布局的场景,方案二更轻量,适合快速实现字段的显隐控制。

内容的提问来源于stack exchange,提问作者Frank Mehlhop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:14:10