Your search did not match any results.
Drop Down Box

Multiple Selection

If the widget embedded into the DropDownBox allows multiple selection, synchronize the DropDownBox value with the selected items. Synchronization instructions are the same for every selection mode.

In this demo, the DataGrid's selection.mode and TreeView's selectionMode options are used to enable multiple selection.

Apply
Reset
<template> <div class="dx-fieldset"> <div class="dx-field"> <div class="dx-field-label">DropDownBox with embedded TreeView</div> <div class="dx-field-value"> <dx-drop-down-box :value.sync="treeBoxValue" :show-clear-button="true" :data-source="treeDataSource" value-expr="ID" display-expr="name" placeholder="Select a value..." @value-changed="syncTreeViewSelection($event)" > <template #content="{ data }"> <dx-tree-view :ref="treeViewName" :data-source="treeDataSource" :select-by-click="true" :select-nodes-recursive="false" data-structure="plain" key-expr="ID" parent-id-expr="categoryId" selection-mode="multiple" show-check-boxes-mode="normal" display-expr="name" @content-ready="syncTreeViewSelection($event)" @item-selection-changed="treeView_itemSelectionChanged($event)" /> </template> </dx-drop-down-box> </div> </div> <div class="dx-field"> <div class="dx-field-label">DropDownBox with embedded DataGrid</div> <div class="dx-field-value"> <dx-drop-down-box :value.sync="gridBoxValue" :defer-rendering="false" :show-clear-button="true" :data-source="gridDataSource" display-expr="CompanyName" value-expr="ID" placeholder="Select a value..." > <template #content="{ data }"> <dx-data-grid :data-source="gridDataSource" :columns="['CompanyName', 'City', 'Phone']" :hover-state-enabled="true" :selected-row-keys.sync="gridBoxValue" > <dx-selection mode="multiple"/> <dx-paging :enabled="true" :page-size="10" /> <dx-filter-row :visible="true"/> <dx-scrolling mode="infinite"/> </dx-data-grid> </template> </dx-drop-down-box> </div> </div> </div> </template> <script> import { DxDropDownBox, DxTreeView } from 'devextreme-vue'; import { DxDataGrid, DxSelection, DxPaging, DxFilterRow, DxScrolling } from 'devextreme-vue/data-grid'; import CustomStore from 'devextreme/data/custom_store'; import 'whatwg-fetch'; export default { components: { DxDropDownBox, DxTreeView, DxDataGrid, DxSelection, DxPaging, DxFilterRow, DxScrolling }, data() { return { treeDataSource: null, treeBoxValue: null, gridDataSource: null, gridBoxValue: [3], treeViewName: 'tree-view' }; }, created() { this.treeDataSource = this.makeAsyncDataSource('treeProducts.json'); this.gridDataSource = this.makeAsyncDataSource('customers.json'); this.treeBoxValue = ['1_1']; }, methods: { makeAsyncDataSource(jsonFile) { return new CustomStore({ loadMode: 'raw', key: 'ID', load: function() { return fetch(`../../../../data/${ jsonFile}`) .then(response => response.json()); } }); }, syncTreeViewSelection(e) { let treeView = (e.component.selectItem && e.component) || (this.$refs[this.treeViewName] && this.$refs[this.treeViewName].instance); if (treeView) { if (e.value === null) { treeView.unselectAll(); } else { let values = e.value || this.treeBoxValue; values && values.forEach(function(value) { treeView.selectItem(value); }); } } }, treeView_itemSelectionChanged(e) { this.treeBoxValue = e.component.getSelectedNodesKeys(); } } }; </script> <style scoped> .dx-fieldset { height: 500px; } </style>
import Vue from 'vue'; import App from './App.vue'; new Vue({ el: '#app', components: { App }, template: '<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.3/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.2.3/css/dx.light.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"> <span v-if="false">Loading...</span> </div> </div> </body> </html>
System.config({ transpiler: 'plugin-babel', paths: { 'npm:': 'https://unpkg.com/' }, map: { vue: 'npm:vue@2.6.3/dist/vue.esm.browser.js', 'vue-loader': 'npm:dx-systemjs-vue-browser@latest/index.js', 'devextreme': 'npm:devextreme@19.2', 'devextreme-vue': 'npm:devextreme-vue@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', 'whatwg-fetch': 'npm:whatwg-fetch@2.0.4/fetch.js', 'plugin-babel': 'npm:systemjs-plugin-babel@0/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0/systemjs-babel-browser.js' }, meta: { '*.vue': { loader: 'vue-loader' } }, packages: { 'devextreme-vue': { main: 'index.js' }, 'devextreme': { defaultExtension: 'js' } }, babelOptions: { sourceMaps: false, stage0: true } });