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
相关产品推荐
相关产品推荐

