Your search did not match any results.
Form

Overview

Documentation

The Form widget allows you to visually represent and edit data stored in an object. The widget binds each layout item to a specific field in an existing data object. To display a simple form, you can assign the required object to the formData option. With the Form widget, you can specify the location of labels against corresponding editors and number of columns used in the form layout. Optionally, the widget can determine the column count based on current form width (adaptive rendering).

Copy to CodeSandBox
Apply
Reset
import React from 'react'; import { CheckBox, SelectBox, NumberBox, Form } from 'devextreme-react'; import service from './data.js'; class App extends React.Component { constructor() { super(); this.companies = service.getCompanies(); this.state = { labelLocation: 'top', readOnly: false, showColon: true, minColWidth: 300, colCount: 2, company: this.companies[0] }; this.onCompanyChanged = this.onCompanyChanged.bind(this); this.onLabelLocationChanged = this.onLabelLocationChanged.bind(this); this.onReadOnlyChanged = this.onReadOnlyChanged.bind(this); this.onShowColonChanged = this.onShowColonChanged.bind(this); this.onMinColWidthChanged = this.onMinColWidthChanged.bind(this); this.onColumnsCountChanged = this.onColumnsCountChanged.bind(this); this.onFormWidthChanged = this.onFormWidthChanged.bind(this); } render() { const { labelLocation, readOnly, showColon, minColWidth, colCount, company, width } = this.state; return ( <div id="form-demo"> <div className="widget-container"> <div>Select company:</div> <SelectBox displayExpr="Name" dataSource={this.companies} value={company} onValueChanged={this.onCompanyChanged} /> <Form id="form" formData={company} readOnly={readOnly} showColonAfterLabel={showColon} labelLocation={labelLocation} minColWidth={minColWidth} colCount={colCount} width={width} /> </div> <div className="options"> <div className="caption">Options</div> <div className="option"> <span>Label location:</span> <SelectBox items={['left', 'top']} value={labelLocation} onValueChanged={this.onLabelLocationChanged} /> </div> <div className="option"> <span>Columns count:</span> <SelectBox items={['auto', 1, 2, 3]} value={colCount} onValueChanged={this.onColumnsCountChanged} /> </div> <div className="option"> <span>Min column width:</span> <SelectBox items={[150, 200, 300]} value={minColWidth} onValueChanged={this.onMinColWidthChanged} /> </div> <div className="option"> <span>Form width:</span> <NumberBox max={550} value={width} onValueChanged={this.onFormWidthChanged} /> </div> <div className="option"> <CheckBox text="readOnly" value={readOnly} onValueChanged={this.onReadOnlyChanged} /> </div> <div className="option"> <CheckBox text="showColonAfterLabel" value={showColon} onValueChanged={this.onShowColonChanged} /> </div> </div> </div> ); } onCompanyChanged(e) { this.setState({ company: e.value }); } onLabelLocationChanged(e) { this.setState({ labelLocation: e.value }); } onReadOnlyChanged(e) { this.setState({ readOnly: e.value }); } onShowColonChanged(e) { this.setState({ showColon: e.value }); } onMinColWidthChanged(e) { this.setState({ minColWidth: e.value }); } onColumnsCountChanged(e) { this.setState({ colCount: e.value }); } onFormWidthChanged(e) { this.setState({ width: e.value }); } } 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/19.2.4/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.2.4/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>
.widget-container { margin-right: 320px; padding: 20px; max-width: 550px; min-width: 300px; } #form { margin-top: 25px; } .options { padding: 20px; position: absolute; bottom: 0; right: 0; width: 260px; top: 0; background-color: rgba(191, 191, 191, 0.15); } .caption { font-size: 18px; font-weight: 500; } .option { margin-top: 10px; }
const companies = [{ ID: 1, Name: 'Super Mart of the West', Address: '702 SW 8th Street', City: 'Bentonville', State: 'Arkansas', ZipCode: 72716, Phone: '(800) 555-2797', Fax: '(800) 555-2171', Website: 'http://www.nowebsitesupermart.com' }, { ID: 2, Name: 'Electronics Depot', Address: '2455 Paces Ferry Road NW', City: 'Atlanta', State: 'Georgia', ZipCode: 30339, Phone: '(800) 595-3232', Fax: '(800) 595-3231', Website: 'http://www.nowebsitedepot.com' }, { ID: 3, Name: 'K&S Music', Address: '1000 Nicllet Mall', City: 'Minneapolis', State: 'Minnesota', ZipCode: 55403, Phone: '(612) 304-6073', Fax: '(612) 304-6074', Website: 'http://www.nowebsitemusic.com' }, { ID: 4, Name: "Tom's Club", Address: '999 Lake Drive', City: 'Issaquah', State: 'Washington', ZipCode: 98027, Phone: '(800) 955-2292', Fax: '(800) 955-2293', Website: 'http://www.nowebsitetomsclub.com' }]; export default { getCompanies() { return companies; } };
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@19.2', 'devextreme-react': 'npm:devextreme-react@19.2', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.7/dist/quill.js', 'devexpress-diagram': 'npm:devexpress-diagram', 'devexpress-gantt': 'npm:devexpress-gantt', // 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 } });