DevExtreme Angular - Overview
The DropDownBox is a widget that consists of a text field, which displays the current value, and a drop-down field, which can contain any UI element.
The simplest widget configuration requires specifying a dataSource, value and contentTemplate. The following code adds the DropDownBox to your page:
jQuery
JavaScript
$(function () {
var fruits = ["Apples", "Oranges", "Lemons", "Pears", "Pineapples"];
$("#dropDownBoxContainer").dxDropDownBox({
value: fruits[0],
dataSource: fruits,
contentTemplate: function(e) {
var $list = $("<div>").dxList({
dataSource: e.component.option("dataSource"),
selectionMode: "single",
onSelectionChanged: function(arg) {
e.component.option("value", arg.addedItems[0]);
e.component.close();
}
});
return $list;
}
});
});Angular
HTML
TypeScript
<dx-drop-down-box
[(value)]="selectedFruit"
[(opened)]="isDropDownBoxOpened"
[dataSource]="fruits">
<dx-list
[dataSource]="fruits"
selectionMode="single"
(onSelectionChanged)="changeDropDownBoxValue($event)">
</dx-list>
</dx-drop-down-box>
import { DxDropDownBoxModule, DxListModule } from "devextreme-angular";
// ...
export class AppComponent {
fruits = ["Apples", "Oranges", "Lemons", "Pears", "Pineapples"];
selectedFruit = this.fruits[0];
isDropDownBoxOpened = false;
changeDropDownBoxValue = function (args) {
this.selectedFruit = args.addedItems[0];
this.isDropDownBoxOpened = false;
}
}
@NgModule({
imports: [
// ...
DxDropDownBoxModule,
DxListModule
],
// ...
})ASP.NET MVC Controls
Razor C#
@(Html.DevExtreme().DropDownBox()
.ID("dropDownBox")
.DataSource(new[] { "Apples", "Oranges", "Lemons", "Pears", "Pineapples" })
.Value("Apples")
.ContentTemplate(new TemplateName("list"))
)
@using (Html.DevExtreme().NamedTemplate("list")) {
@(Html.DevExtreme().List()
.DataSource(new JS("component.option('dataSource')"))
.SelectionMode(ListSelectionMode.Single)
.OnSelectionChanged("innerList_selectionChanged")
)
}
<script>
function innerList_selectionChanged (e) {
var dropDownBox = $("#dropDownBox").dxDropDownBox("instance");
dropDownBox.option("value", e.addedItems[0]);
dropDownBox.close();
}
</script>Vue
DxComponent.vue
<template>
<div>
<dx-drop-down-box
:value.sync="selectedFruit"
:opened.sync="isDropDownBoxOpened"
:data-source="dataSource">
<dx-list
:data-source="dataSource"
selection-mode="single"
@selection-changed="changeDropDownBoxValue($event)">
</dx-list>
</dx-drop-down-box>
</div>
</template>
<script>
import DxDropDownBox from "devextreme-vue/drop-down-box";
import DxList from "devextreme-vue/list";
export default {
components: {
DxDropDownBox,
DxList
},
data() {
const fruits = ["Apples", "Oranges", "Lemons", "Pears", "Pineapples"];
return {
dataSource: fruits,
isDropDownBoxOpened: false,
selectedFruit: fruits[0]
}
},
methods: {
changeDropDownBoxValue(e) {
this.selectedFruit = e.addedItems[0];
this.isDropDownBoxOpened = false;
}
}
}
</script>If your data is an array of objects, specify:
- valueExpr
The data field whose value is written into the value option. - displayExpr
The data field whose value is displayed in the input field of the widget.
jQuery
JavaScript
$(function () {
var customers = [
{ ID: 1, companyName: "Premier Buy", city: "Dallas", phone: "(233)2123-11" }
// ...
];
var selectedValue = customers[0].ID;
$("#dropDownBoxContainer").dxDropDownBox({
value: selectedValue,
valueExpr: "ID",
displayExpr: "companyName",
dataSource: new DevExpress.data.ArrayStore({
data: customers,
key: "ID"
}),
contentTemplate: function(e){
var $dataGrid = $("<div>").dxDataGrid({
dataSource: e.component.option("dataSource"),
columns: ["companyName", "city", "phone"],
height: 265,
selection: { mode: "single" },
selectedRowKeys: [selectedValue],
onSelectionChanged: function(selectedItems){
var keys = selectedItems.selectedRowKeys,
hasSelection = keys.length;
e.component.option("value", hasSelection ? keys[0] : null);
e.component.close();
}
});
return $dataGrid;
}
});
});Angular
HTML
TypeScript
<dx-drop-down-box
[(value)]="selectedCustomers"
[(opened)]="isDropDownBoxOpened"
valueExpr="ID"
displayExpr="companyName"
[dataSource]="customerDataSource">
<dx-data-grid
[dataSource]="customerDataSource"
[selection]="{ mode: 'single' }"
[columns]="['companyName', 'city', 'phone']"
[height]="265"
[(selectedRowKeys)]="selectedCustomers"
(onSelectionChanged)="closeDropDownBox($event)">
</dx-data-grid>
</dx-drop-down-box>
import { DxDropDownBoxModule, DxDataGridModule } from "devextreme-angular";
import ArrayStore from "devextreme/data/array_store";
// ...
export class AppComponent {
customers = [
{ ID: 1, companyName: "Premier Buy", city: "Dallas", phone: "(233)2123-11" },
// ...
];
customerDataSource = new ArrayStore({
data: this.customers,
key: "ID"
});
selectedCustomers = [this.customers[0].ID];
isDropDownBoxOpened = false;
closeDropDownBox (args) {
this.isDropDownBoxOpened = false;
}
}
@NgModule({
imports: [
// ...
DxDropDownBoxModule,
DxDataGridModule
],
// ...
})ASP.NET MVC Controls
Razor C#
@(Html.DevExtreme().DropDownBox()
.ID("dropDownBox")
.DataSource(ds => ds.Array()
.Key("ID")
.Data(new JS("customers"))
)
.Value(new JS("selectedValue"))
.ValueExpr("ID")
.DisplayExpr("companyName")
.ContentTemplate(new TemplateName("dataGrid"))
)
@using (Html.DevExtreme().NamedTemplate("dataGrid")) {
@(Html.DevExtreme().DataGrid()
.DataSource(new JS("component.option('dataSource')"))
.Columns(c => {
c.Add().DataField("companyName");
c.Add().DataField("city");
c.Add().DataField("phone");
})
.Height(265)
.Selection(s => s.Mode(SelectionMode.Single))
.SelectedRowKeys(new JS("selectedValue"))
.OnSelectionChanged("innerDataGrid_selectionChanged")
)
}
<script>
var customers = [
{ ID: 1, companyName: "Premier Buy", city: "Dallas", phone: "(233)2123-11" },
// ...
];
var selectedValue = customers[0].ID;
function innerDataGrid_selectionChanged(selectedItems) {
var keys = selectedItems.selectedRowKeys,
hasSelection = keys.length,
dropDownBox = $("#dropDownBox").dxDropDownBox("instance");
dropDownBox.option("value", hasSelection ? keys[0] : null);
dropDownBox.close();
}
</script>Vue
DxComponent.vue
<template>
<div>
<dx-drop-down-box
:value.sync="selectedCustomers"
:opened.sync="isDropDownBoxOpened"
:data-source="customerDataSource"
value-expr="ID"
display-expr="companyName">
<dx-data-grid
:data-source="customerDataSource"
:columns="['companyName', 'city', 'phone']"
:height="265"
:selected-row-keys.sync="selectedCustomers"
@selection-changed="closeDropDownBox($event)">
<dx-selection mode="single"/>
</dx-data-grid>
</dx-drop-down-box>
</div>
</template>
<script>
import DxDropDownBox from "devextreme-vue/drop-down-box";
import { DxDataGrid, DxSelection } from "devextreme-vue/data-grid";
import ArrayStore from "devextreme/data/array_store";
export default {
components: {
DxDropDownBox,
DxDataGrid,
DxSelection
},
data() {
const customers = [
{ ID: 1, companyName: "Premier Buy", city: "Dallas", phone: "(233)2123-11" },
// ...
];
return {
customerDataSource: new ArrayStore({
data: customers,
key: "ID"
}),
isDropDownBoxOpened: false,
selectedCustomers: [customers[0].ID]
}
},
methods: {
closeDropDownBox(e) {
this.isDropDownBoxOpened = false;
}
}
}
</script>See Also
Feel free to share topic-related thoughts here.
If you have technical questions, please create a support ticket in the DevExpress Support Center.
Thank you for the feedback!
If you have technical questions, please create a support ticket in the DevExpress Support Center.