Help us shape the 2021 DevExtreme Roadmap. Take our 5 minute survey.
Dismiss
Your search did not match any results.
Form

Grouped Fields

Documentation

This demo illustrates how to organize Form items into groups and tabbed pages. For this purpose, an array containing «group» and «tabbed» items is passed to the items property.

Copy to CodeSandBox
Apply
Reset
<template> <div> <div class="long-title"><h3>Personal details</h3></div> <div id="form-container"> <DxForm id="form" :col-count="2" :form-data="employee" > <DxGroupItem caption="System Information" > <DxSimpleItem data-field="ID" /> <DxSimpleItem data-field="FirstName" /> <DxSimpleItem data-field="LastName" /> <DxSimpleItem data-field="HireDate" /> <DxSimpleItem data-field="Position" /> <DxSimpleItem data-field="OfficeNo" /> </DxGroupItem> <DxGroupItem caption="Personal Data" > <DxSimpleItem data-field="BirthDate" /> <DxGroupItem caption="Home Address" > <DxSimpleItem data-field="Address" /> <DxSimpleItem data-field="City" /> <DxSimpleItem data-field="State" /> <DxSimpleItem data-field="Zipcode" /> </DxGroupItem> </DxGroupItem> <DxGroupItem caption="Contact Information" > <DxTabbedItem> <DxTabPanelOptions :defer-rendering="false" /> <DxTab title="Phone" > <DxSimpleItem data-field="Phone" /> </DxTab> <DxTab title="Skype" > <DxSimpleItem data-field="Skype" /> </DxTab> <DxTab title="Email" > <DxSimpleItem data-field="Email" /> </DxTab> </DxTabbedItem> </DxGroupItem> </DxForm> </div> </div> </template> <script> import { DxForm, DxSimpleItem, DxGroupItem, DxTabbedItem, DxTabPanelOptions, DxTab } from 'devextreme-vue/form'; import service from './data.js'; import 'devextreme-vue/text-area'; export default { components: { DxForm, DxSimpleItem, DxGroupItem, DxTabbedItem, DxTabPanelOptions, DxTab }, data() { const employee = service.getEmployee(); return { employee }; } }; </script> <style scoped> #form-container { margin: 10px; } .long-title h3 { font-family: 'Segoe UI Light', 'Helvetica Neue Light', 'Segoe UI', 'Helvetica Neue', 'Trebuchet MS', Verdana; font-weight: 200; font-size: 28px; text-align: center; margin-bottom: 20px; } </style>
import { createApp } from 'vue'; import App from './App.vue'; createApp(App).mount('#app');
<!DOCTYPE html> <html> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.5/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.5/css/dx.light.css" /> <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import('./index.js'); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"> </div> </div> </body> </html>
const employee = { 'ID': 1, 'FirstName': 'John', 'LastName': 'Heart', 'CompanyName': 'Super Mart of the West', 'Position': 'CEO', 'OfficeNo': '901', 'BirthDate': new Date(1964, 2, 16), 'HireDate': new Date(1995, 0, 15), 'Address': '351 S Hill St.', 'City': 'Los Angeles', 'State': 'CA', 'Zipcode': '90013', 'Phone': '+1(213) 555-9392', 'Email': 'jheart@dx-email.com', 'Skype': 'jheart_DX_skype' }; export default { getEmployee() { return employee; } };
System.config({ transpiler: 'plugin-babel', meta: { '*.vue': { loader: 'vue-loader' }, 'devextreme/localization.js': { "esModule": true }, }, paths: { 'npm:': 'https://unpkg.com/' }, map: { 'vue': 'npm:vue@3.0.0/dist/vue.esm-browser.js', 'vue-loader': 'npm:dx-systemjs-vue-browser@1.0.15/index.js', 'mitt': 'npm:mitt/dist/mitt.umd.js', 'rrule': 'npm:rrule@2.6.6/dist/es5/rrule.js', 'luxon': 'npm:luxon@1.25.0/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', 'devextreme': 'npm:devextreme@20.2.5', 'devextreme-vue': 'npm:devextreme-vue@20.2.5', 'jszip': 'npm:jszip@3.5.0/dist/jszip.min.js', 'devextreme-quill': 'npm:devextreme-quill@0.9.8/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.0.11/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@2.0.18/dist/dx-gantt.js', 'preact': 'npm:preact@10.5.11/dist/preact.js', 'preact/hooks': 'npm:preact@10.5.11/hooks/dist/hooks.js', 'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js' }, packages: { 'devextreme-vue': { main: 'index.js' }, 'devextreme': { defaultExtension: 'js' }, 'devextreme/events/utils': { main: 'index' }, 'devextreme/events': { main: 'index' }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js' } }, babelOptions: { sourceMaps: false, stage0: true } });