Your search did not match any results.
Form

Customize Item

Documentation

The Form widget can create form items automatically for each field of the formData object. If you’d prefer to configure form items manually, pass the required array of configuration objects to the items option. You can specify the name of the bound data field, editor type, editor configuration, validation options (etc.) for each form item.

Copy to CodeSandBox
Apply
Reset
import React from 'react'; import 'devextreme-react/text-area'; import Form, { Item } from 'devextreme-react/form'; import service from './data.js'; class App extends React.Component { constructor(props) { super(props); this.employee = service.getEmployee(); this.positions = service.getPositions(); this.rules = { 'X': /[02-9]/ }; this.validationRules = { position: [ { type: 'required', message: 'Position is required.' }, ], hireDate: [ { type: 'required', message: 'Hire Date is required.' } ] }; this.validateForm = (e) => { e.component.validate(); }; } render() { return ( <React.Fragment> <div className={'long-title'}><h3>Employee Details</h3></div> <div className={'form-container'}> <Form onContentReady={this.validateForm} colCount={2} id={'form'} formData={this.employee}> <Item dataField={'FirstName'} editorOptions={{ disabled: true }} /> <Item dataField={'Position'} editorType={'dxSelectBox'} editorOptions={{ items: this.positions, value: '' }} validationRules={this.validationRules.position} /> <Item dataField={'LastName'} editorOptions={{ disabled: true }} /> <Item dataField={'HireDate'} editorType={'dxDateBox'} editorOptions={{ width: '100%', value: null }} validationRules={this.validationRules.hireDate} /> <Item dataField={'BirthDate'} editorType={'dxDateBox'} editorOptions={{ width: '100%', disabled: true }} /> <Item dataField={'Address'} /> <Item dataField={'Notes'} colSpan={2} editorType={'dxTextArea'} editorOptions={{ height: 90 }} /> <Item dataField={'Phone'} editorOptions={{ mask: '+1 (X00) 000-0000', maskRules: this.rules }} /> <Item dataField={'Email'} /> </Form> </div> </React.Fragment> ); } } export default App;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.js'; ReactDOM.render( <App />, document.getElementById('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/18.2.7/css/dx.common.css" /> <link rel="dx-theme" data-theme="generic.light" href="https://cdn3.devexpress.com/jslib/18.2.7/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" /> <link rel="stylesheet" type ="text/css" href ="styles.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>
.form-container { margin: 10px 10px 30px; } .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; }
const employee = { ID: 1, FirstName: 'John', LastName: 'Heart', Position: 'CEO', BirthDate: '1964/03/16', HireDate: '1995/01/15', Notes: 'John has been in the Audio/Video industry since 1990. He has led DevAv as its CEO since 2003.\r\n\r\nWhen not working hard as the CEO, John loves to golf and bowl. He once bowled a perfect game of 300.', Address: '351 S Hill St., Los Angeles, CA', Phone: '360-684-1334', Email: 'jheart@dx-email.com' }; const positions = [ 'HR Manager', 'IT Manager', 'CEO', 'Controller', 'Sales Manager', 'Support Manager', 'Shipping Manager' ]; export default { getEmployee() { return employee; }, getPositions() { return positions; } };
System.config({ transpiler: 'plugin-babel', paths: { 'npm:': 'https://unpkg.com/' }, defaultExtension: 'js', map: { 'react': 'npm:react@16/umd/react.development.js', 'react-dom': 'npm:react-dom@16/umd/react-dom.development.js', 'prop-types': 'npm:prop-types/prop-types.js', 'devextreme': 'npm:devextreme@18.2', 'devextreme-react': 'npm:devextreme-react@18.2', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.6/dist/quill.js', // SystemJS plugins 'plugin-babel': 'npm:systemjs-plugin-babel@0/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0/systemjs-babel-browser.js' }, packages: { 'devextreme': { defaultExtension: 'js' }, 'devextreme-react': { main: 'index.js' } }, babelOptions: { sourceMaps: false, stage0: true, react: true } });