DevExtreme v25.1 is now available.

Explore our newest features/capabilities and share your thoughts with us.

Your search did not match any results.

React Card View - Web API Service

To access a Web API service from the client, use the createStore method which is part of the DevExtreme.AspNet.Data extension. This extension also allows you to process data for DevExtreme components on the server.

To notify our CardView that data is processed on the server, set the remoteOperations property to true.

Backend API
import React from 'react'; import * as AspNetData from 'devextreme-aspnet-data-nojquery'; import CardView, { Column, Editing, RequiredRule, SearchPanel, HeaderFilter, Form, Item } from 'devextreme-react/card-view'; import 'devextreme-react/text-area'; const url = 'https://js.devexpress.com/Demos/NetCore/api/TreeListTasks'; const dataSource = AspNetData.createStore({ key: 'Task_ID', loadUrl: `${url}/Tasks`, insertUrl: `${url}/InsertTask`, updateUrl: `${url}/UpdateTask`, deleteUrl: `${url}/DeleteTask`, onBeforeSend(method, ajaxOptions) { ajaxOptions.xhrFields = { withCredentials: true }; }, }); const App = () => ( <CardView dataSource={dataSource} remoteOperations={true} cardsPerRow="auto" cardMinWidth={280} wordWrapEnabled={true} > <SearchPanel visible={true} /> <HeaderFilter visible={true} /> <Editing allowAdding={true} allowUpdating={true} allowDeleting={true} popup={{ width: 700, height: 400 }} > <Form> <Item dataField="Task_Subject" ></Item> <Item dataField="Task_Start_Date" ></Item> <Item dataField="Task_Due_Date" ></Item> <Item dataField="Task_Priority" editorType="dxSelectBox" editorOptions={{ dataSource: ['Low', 'Normal', 'High', 'Urgent'] }} ></Item> <Item dataField="Task_Status" ></Item> </Form> </Editing> <Column dataField="Task_Subject" caption="Subject" > <RequiredRule/> </Column> <Column dataField="Task_Start_Date" caption="Start Date" dataType="date" ></Column> <Column dataField="Task_Due_Date" caption="Due Date" dataType="date" ></Column> <Column dataField="Task_Priority" caption="Priority" ></Column> <Column dataField="Task_Status" caption="Status" ></Column> </CardView> ); export default App;
import React from 'react'; import * as AspNetData from 'devextreme-aspnet-data-nojquery'; import CardView, { Column, Editing, RequiredRule, SearchPanel, HeaderFilter, Form, Item, } from 'devextreme-react/card-view'; import 'devextreme-react/text-area'; const url = 'https://js.devexpress.com/Demos/NetCore/api/TreeListTasks'; const dataSource = AspNetData.createStore({ key: 'Task_ID', loadUrl: `${url}/Tasks`, insertUrl: `${url}/InsertTask`, updateUrl: `${url}/UpdateTask`, deleteUrl: `${url}/DeleteTask`, onBeforeSend(method, ajaxOptions) { ajaxOptions.xhrFields = { withCredentials: true }; }, }); const App = () => ( <CardView dataSource={dataSource} remoteOperations={true} cardsPerRow="auto" cardMinWidth={280} wordWrapEnabled={true} > <SearchPanel visible={true} /> <HeaderFilter visible={true} /> <Editing allowAdding={true} allowUpdating={true} allowDeleting={true} popup={{ width: 700, height: 400 }} > <Form> <Item dataField="Task_Subject"></Item> <Item dataField="Task_Start_Date"></Item> <Item dataField="Task_Due_Date"></Item> <Item dataField="Task_Priority" editorType="dxSelectBox" editorOptions={{ dataSource: ['Low', 'Normal', 'High', 'Urgent'] }} ></Item> <Item dataField="Task_Status"></Item> </Form> </Editing> <Column dataField="Task_Subject" caption="Subject" > <RequiredRule /> </Column> <Column dataField="Task_Start_Date" caption="Start Date" dataType="date" ></Column> <Column dataField="Task_Due_Date" caption="Due Date" dataType="date" ></Column> <Column dataField="Task_Priority" caption="Priority" ></Column> <Column dataField="Task_Status" caption="Status" ></Column> </CardView> ); export default App;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.tsx'; ReactDOM.render( <App />, document.getElementById('app'), );
window.exports = window.exports || {}; window.config = { transpiler: 'ts', typescriptOptions: { module: 'system', emitDecoratorMetadata: true, experimentalDecorators: true, jsx: 'react', }, meta: { 'react': { 'esModule': true, }, 'typescript': { 'exports': 'ts', }, 'devextreme/time_zone_utils.js': { 'esModule': true, }, 'devextreme/localization.js': { 'esModule': true, }, 'devextreme/viz/palette.js': { 'esModule': true, }, 'devextreme-aspnet-data-nojquery': { 'esModule': true, }, 'openai': { 'esModule': true, }, }, paths: { 'npm:': 'https://cdn.jsdelivr.net/npm/', 'bundles:': '../../../../bundles/', 'externals:': '../../../../bundles/externals/', }, defaultExtension: 'js', map: { 'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@4.2.4/lib/typescript.js', 'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js', 'react': 'npm:react@17.0.2/umd/react.development.js', 'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js', 'prop-types': 'npm:prop-types/prop-types.js', 'devextreme-aspnet-data-nojquery': 'npm:devextreme-aspnet-data-nojquery@5.0.0/index.js', 'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js', 'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign', 'devextreme': 'npm:devextreme@25.1.3/cjs', 'devextreme-react': 'npm:devextreme-react@25.1.3/cjs', 'devextreme-quill': 'npm:devextreme-quill@1.7.3/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.2.19/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@4.1.62/dist/dx-gantt.js', 'inferno': 'npm:inferno@8.2.3/dist/inferno.min.js', 'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js', 'inferno-create-element': 'npm:inferno-create-element@8.2.3/dist/inferno-create-element.min.js', 'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js', 'inferno-hydrate': 'npm:inferno-hydrate/dist/inferno-hydrate.min.js', 'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js', 'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js', 'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js', '@preact/signals-core': 'npm:@preact/signals-core@1.8.0/dist/signals-core.min.js', 'devextreme-cldr-data': 'npm:devextreme-cldr-data@1.0.3', // SystemJS plugins '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', // Prettier 'prettier/standalone': 'npm:prettier@2.8.8/standalone.js', 'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js', }, packages: { 'devextreme': { defaultExtension: 'js', }, 'devextreme-react': { main: 'index.js', }, 'devextreme-react/common': { main: 'index.js', }, 'devextreme/events/utils': { main: 'index', }, 'devextreme/common/core/events/utils': { main: 'index', }, 'devextreme/localization/messages': { format: 'json', defaultExtension: 'json', }, 'devextreme/events': { main: 'index', }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js', }, }, packageConfigPaths: [ 'npm:@devextreme/*/package.json', ], babelOptions: { sourceMaps: false, stage0: true, react: true, }, }; System.config(window.config);
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.js'; ReactDOM.render(<App />, document.getElementById('app'));
<!DOCTYPE html> <html lang="en"> <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=5.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/25.1.3/css/dx.light.css" /> <script src="https://cdn.jsdelivr.net/npm/core-js@2.6.12/client/shim.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/systemjs@0.21.3/dist/system.js"></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import("./index.tsx"); </script> <link rel="stylesheet" type="text/css" href="styles.css" /> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"></div> </div> </body> </html>