Search results

Card Editing in Vue Kanban component

24 Sep 2021 / 12 minutes to read

The Kanban provides built-in support to add, edit and delete a card using dialog module. User can edit a card using the following ways.

  • Built-in dialog module
  • Custom Fields
  • Dialog template

Default Dialog

When double-click on the cards, the dialog is opened with below fields to edit a card. This dialog contains Delete, Save and Cancel buttons.

  • To edit a card, modify the card details and click the Save button.
  • To delete a card, click Delete button.
  • Click on the Cancel button to cancel the editing action.

The dialog displays with the following fields which mapped to dialog fields by default.

Key Type Text
cardSettings.headerField Input ID
keyField DropDown -
cardSettings.contentField TextArea -
cardSettings.priority(If applicable) Numeric -
swimlaneSettings.keyField(If applicable) DropDown -
Source
Preview
app.vue
datasource.js
Copied to clipboard
<template>
  <div id="app">
   <ejs-kanban id="kanban" keyField="Status" :dataSource="kanbanData"
    :cardSettings="cardSettings">
      <e-columns>
        <e-column headerText="To Do" keyField="Open"></e-column>
        <e-column headerText="In Progress" keyField="InProgress"></e-column>
        <e-column headerText="Testing" keyField="Testing"></e-column>
        <e-column headerText="Done" keyField="Close"></e-column>
      </e-columns>
    </ejs-kanban>
  </div>
</template>

<script>
import Vue from "vue";
import { KanbanPlugin } from '@syncfusion/ej2-vue-kanban';
import { extend } from '@syncfusion/ej2-base';
import { kanbanData } from './datasource.js';
Vue.use(KanbanPlugin);
export default {
  data: function() {
return {
  kanbanData: extend([], kanbanData, null, true),
  cardSettings: {
    contentField: "Summary",
    headerField: "Id",
  }
};
  },
}
</script>
<style>
@import '../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material.css';
@import '../node_modules/@syncfusion/ej2-layouts/styles/material.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material.css';
@import '../node_modules/@syncfusion/ej2-vue-kanban/styles/material.css';
</style>
Copied to clipboard
define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.kanbanData = [
        {
            'Id': 1,
            'Status': 'Open',
            'Summary': 'Analyze the new requirements gathered from the customer.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Analyze,Customer',
            'Estimate': 3.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 2,
            'Status': 'InProgress',
            'Summary': 'Improve application performance',
            'Type': 'Improvement',
            'Priority': 'Normal',
            'Tags': 'Improvement',
            'Estimate': 6,
            'Assignee': 'Andrew Fuller',
            'RankId': 1
        },
        {
            'Id': 3,
            'Status': 'Open',
            'Summary': 'Arrange a web meeting with the customer to get new requirements.',
            'Type': 'Others',
            'Priority': 'Critical',
            'Tags': 'Meeting',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 4,
            'Status': 'InProgress',
            'Summary': 'Fix the issues reported in the IE browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'IE',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 5,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported by the customer.',
            'Type': 'Bug',
            'Priority': 'Low',
            'Tags': 'Customer',
            'Estimate': '3.5',
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 6,
            'Status': 'Close',
            'Summary': 'Arrange a web meeting with the customer to get the login page requirements.',
            'Type': 'Others',
            'Priority': 'Low',
            'Tags': 'Meeting',
            'Estimate': 2,
            'Assignee': 'Michael Suyama',
            'RankId': 1
        },
        {
            'Id': 7,
            'Status': 'Validate',
            'Summary': 'Validate new requirements',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Robert King',
            'RankId': 1
        },
        {
            'Id': 8,
            'Status': 'Close',
            'Summary': 'Login page validation',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Validation,Fix',
            'Estimate': 2.5,
            'Assignee': 'Laura Callahan',
            'RankId': 2
        },
        {
            'Id': 9,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in Safari browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'Fix,Safari',
            'Estimate': 1.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 2
        },
        {
            'Id': 10,
            'Status': 'Close',
            'Summary': 'Test the application in the IE browser.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Testing,IE',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 3
        },
        {
            'Id': 11,
            'Status': 'Validate',
            'Summary': 'Validate the issues reported by the customer.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Validation,Fix',
            'Estimate': 1,
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 12,
            'Status': 'Testing',
            'Summary': 'Check Login page validation.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Testing',
            'Estimate': 0.5,
            'Assignee': 'Michael Suyama',
            'RankId': 3
        },
        {
            'Id': 13,
            'Status': 'Open',
            'Summary': 'API improvements.',
            'Type': 'Improvement',
            'Priority': 'High',
            'Tags': 'Grid,API',
            'Estimate': 3.5,
            'Assignee': 'Robert King',
            'RankId': 3
        },
        {
            'Id': 14,
            'Status': 'InProgress',
            'Summary': 'Add responsive support to application',
            'Type': 'Epic',
            'Priority': 'Critical',
            'Tags': 'Responsive',
            'Estimate': 6,
            'Assignee': 'Laura Callahan',
            'RankId': 3
        },
        {
            'Id': 15,
            'Status': 'Open',
            'Summary': 'Show the retrieved data from the server in grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Database,SQL',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 4
        },
        {
            'Id': 16,
            'Status': 'InProgress',
            'Summary': 'Fix cannot open user’s default database SQL error.',
            'Priority': 'Critical',
            'Type': 'Bug',
            'Tags': 'Database,Sql2008',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 17,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in data binding.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Databinding',
            'Estimate': '3.5',
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 18,
            'Status': 'Close',
            'Summary': 'Analyze SQL server 2008 connection.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Grid,Sql',
            'Estimate': 2,
            'Assignee': 'Andrew Fuller',
            'RankId': 4
        },
        {
            'Id': 19,
            'Status': 'Validate',
            'Summary': 'Validate databinding issues.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 1
        },
        {
            'Id': 20,
            'Status': 'Close',
            'Summary': 'Analyze grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Analyze',
            'Estimate': 2.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 5
        },
        {
            'Id': 21,
            'Status': 'Close',
            'Summary': 'Stored procedure for initial data binding of the grid.',
            'Type': 'Others',
            'Priority': 'Release Breaker',
            'Tags': 'Databinding',
            'Estimate': 1.5,
            'Assignee': 'Steven walker',
            'RankId': 6
        },
        {
            'Id': 22,
            'Status': 'Close',
            'Summary': 'Analyze stored procedures.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Procedures',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 7
        },
        {
            'Id': 23,
            'Status': 'Validate',
            'Summary': 'Validate editing issues.',
            'Type': 'Story',
            'Priority': 'Critical',
            'Tags': 'Editing',
            'Estimate': 1,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 24,
            'Status': 'Testing',
            'Summary': 'Test editing functionality.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Editing,Test',
            'Estimate': 0.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 5
        },
        {
            'Id': 25,
            'Status': 'Open',
            'Summary': 'Enhance editing functionality.',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Editing',
            'Estimate': 3.5,
            'Assignee': 'Andrew Fuller',
            'RankId': 5
        }
    ];
});

Custom Fields

You can change the default fields of dialog using fields property inside the dialogSettings property. The key property used to map the dataSource value and rendered the corresponding component based on specified type property.

The following types are available in dialog fields.

  • String
  • Numeric
  • TextArea
  • DropDown
  • TextBox
  • Input

If type is not defined in the fields, then it renders as the HTML input element in dialog.

Source
Preview
app.vue
datasource.js
Copied to clipboard
<template>
  <div id="app">
   <ejs-kanban id="kanban" keyField="Status" :dataSource="kanbanData"
    :cardSettings="cardSettings" :dialogSettings="dialogSettings">
      <e-columns>
        <e-column headerText="To Do" keyField="Open"></e-column>
        <e-column headerText="In Progress" keyField="InProgress"></e-column>
        <e-column headerText="Testing" keyField="Testing"></e-column>
        <e-column headerText="Done" keyField="Close"></e-column>
      </e-columns>
    </ejs-kanban>
  </div>
</template>

<script>
import Vue from "vue";
import { KanbanPlugin } from '@syncfusion/ej2-vue-kanban';
import { extend } from '@syncfusion/ej2-base';
import { kanbanData } from './datasource.js';
Vue.use(KanbanPlugin);
export default {
  data: function() {
return {
  kanbanData: extend([], kanbanData, null, true),
  cardSettings: {
    contentField: "Summary",
    headerField: "Id",
  },
  dialogSettings: {
    fields: [
            { text: 'ID', key: 'Id', type: 'Input' },
            { key: 'Category', type: 'DropDown' },
            { key: 'Title', type: 'Input' },
            { key: 'Size', type: 'Input' },
            { key: 'Description', type: 'TextArea' }
        ]
    }
};
  },
}
</script>
<style>
@import '../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material.css';
@import '../node_modules/@syncfusion/ej2-layouts/styles/material.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material.css';
@import '../node_modules/@syncfusion/ej2-vue-kanban/styles/material.css';
</style>
Copied to clipboard
define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.kanbanData = [
        {
            'Id': 1,
            'Status': 'Open',
            'Summary': 'Analyze the new requirements gathered from the customer.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Analyze,Customer',
            'Estimate': 3.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 2,
            'Status': 'InProgress',
            'Summary': 'Improve application performance',
            'Type': 'Improvement',
            'Priority': 'Normal',
            'Tags': 'Improvement',
            'Estimate': 6,
            'Assignee': 'Andrew Fuller',
            'RankId': 1
        },
        {
            'Id': 3,
            'Status': 'Open',
            'Summary': 'Arrange a web meeting with the customer to get new requirements.',
            'Type': 'Others',
            'Priority': 'Critical',
            'Tags': 'Meeting',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 4,
            'Status': 'InProgress',
            'Summary': 'Fix the issues reported in the IE browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'IE',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 5,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported by the customer.',
            'Type': 'Bug',
            'Priority': 'Low',
            'Tags': 'Customer',
            'Estimate': '3.5',
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 6,
            'Status': 'Close',
            'Summary': 'Arrange a web meeting with the customer to get the login page requirements.',
            'Type': 'Others',
            'Priority': 'Low',
            'Tags': 'Meeting',
            'Estimate': 2,
            'Assignee': 'Michael Suyama',
            'RankId': 1
        },
        {
            'Id': 7,
            'Status': 'Validate',
            'Summary': 'Validate new requirements',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Robert King',
            'RankId': 1
        },
        {
            'Id': 8,
            'Status': 'Close',
            'Summary': 'Login page validation',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Validation,Fix',
            'Estimate': 2.5,
            'Assignee': 'Laura Callahan',
            'RankId': 2
        },
        {
            'Id': 9,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in Safari browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'Fix,Safari',
            'Estimate': 1.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 2
        },
        {
            'Id': 10,
            'Status': 'Close',
            'Summary': 'Test the application in the IE browser.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Testing,IE',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 3
        },
        {
            'Id': 11,
            'Status': 'Validate',
            'Summary': 'Validate the issues reported by the customer.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Validation,Fix',
            'Estimate': 1,
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 12,
            'Status': 'Testing',
            'Summary': 'Check Login page validation.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Testing',
            'Estimate': 0.5,
            'Assignee': 'Michael Suyama',
            'RankId': 3
        },
        {
            'Id': 13,
            'Status': 'Open',
            'Summary': 'API improvements.',
            'Type': 'Improvement',
            'Priority': 'High',
            'Tags': 'Grid,API',
            'Estimate': 3.5,
            'Assignee': 'Robert King',
            'RankId': 3
        },
        {
            'Id': 14,
            'Status': 'InProgress',
            'Summary': 'Add responsive support to application',
            'Type': 'Epic',
            'Priority': 'Critical',
            'Tags': 'Responsive',
            'Estimate': 6,
            'Assignee': 'Laura Callahan',
            'RankId': 3
        },
        {
            'Id': 15,
            'Status': 'Open',
            'Summary': 'Show the retrieved data from the server in grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Database,SQL',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 4
        },
        {
            'Id': 16,
            'Status': 'InProgress',
            'Summary': 'Fix cannot open user’s default database SQL error.',
            'Priority': 'Critical',
            'Type': 'Bug',
            'Tags': 'Database,Sql2008',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 17,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in data binding.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Databinding',
            'Estimate': '3.5',
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 18,
            'Status': 'Close',
            'Summary': 'Analyze SQL server 2008 connection.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Grid,Sql',
            'Estimate': 2,
            'Assignee': 'Andrew Fuller',
            'RankId': 4
        },
        {
            'Id': 19,
            'Status': 'Validate',
            'Summary': 'Validate databinding issues.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 1
        },
        {
            'Id': 20,
            'Status': 'Close',
            'Summary': 'Analyze grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Analyze',
            'Estimate': 2.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 5
        },
        {
            'Id': 21,
            'Status': 'Close',
            'Summary': 'Stored procedure for initial data binding of the grid.',
            'Type': 'Others',
            'Priority': 'Release Breaker',
            'Tags': 'Databinding',
            'Estimate': 1.5,
            'Assignee': 'Steven walker',
            'RankId': 6
        },
        {
            'Id': 22,
            'Status': 'Close',
            'Summary': 'Analyze stored procedures.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Procedures',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 7
        },
        {
            'Id': 23,
            'Status': 'Validate',
            'Summary': 'Validate editing issues.',
            'Type': 'Story',
            'Priority': 'Critical',
            'Tags': 'Editing',
            'Estimate': 1,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 24,
            'Status': 'Testing',
            'Summary': 'Test editing functionality.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Editing,Test',
            'Estimate': 0.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 5
        },
        {
            'Id': 25,
            'Status': 'Open',
            'Summary': 'Enhance editing functionality.',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Editing',
            'Estimate': 3.5,
            'Assignee': 'Andrew Fuller',
            'RankId': 5
        }
    ];
});

Custom Fields label

By default, the fields key mapping value is considered as a label and you can change this label by using text property.

Source
Preview
app.vue
datasource.js
Copied to clipboard
<template>
  <div id="app">
   <ejs-kanban id="kanban" keyField="Status" :dataSource="kanbanData"
    :cardSettings="cardSettings" :dialogSettings="dialogSettings">
      <e-columns>
        <e-column headerText="To Do" keyField="Open"></e-column>
        <e-column headerText="In Progress" keyField="InProgress"></e-column>
        <e-column headerText="Testing" keyField="Testing"></e-column>
        <e-column headerText="Done" keyField="Close"></e-column>
      </e-columns>
    </ejs-kanban>
  </div>
</template>

<script>
import Vue from "vue";
import { KanbanPlugin } from '@syncfusion/ej2-vue-kanban';
import { extend } from '@syncfusion/ej2-base';
import { kanbanData } from './datasource.js';
Vue.use(KanbanPlugin);
export default {
  data: function() {
return {
  kanbanData: extend([], kanbanData, null, true),
  cardSettings: {
    contentField: "Summary",
    headerField: "Id",
  },
  dialogSettings: {
    fields: [
        { text: 'ID', key: 'Id', type: 'Input' },
        { key: 'Status', type: 'DropDown' },
        { key: 'Estimate', type: 'Numeric' },
        { key: 'Summary', type: 'TextArea' }
    ]
  }
};
  },
}
</script>
<style>
@import '../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material.css';
@import '../node_modules/@syncfusion/ej2-layouts/styles/material.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material.css';
@import '../node_modules/@syncfusion/ej2-vue-kanban/styles/material.css';
</style>
Copied to clipboard
define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.kanbanData = [
        {
            'Id': 1,
            'Status': 'Open',
            'Summary': 'Analyze the new requirements gathered from the customer.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Analyze,Customer',
            'Estimate': 3.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 2,
            'Status': 'InProgress',
            'Summary': 'Improve application performance',
            'Type': 'Improvement',
            'Priority': 'Normal',
            'Tags': 'Improvement',
            'Estimate': 6,
            'Assignee': 'Andrew Fuller',
            'RankId': 1
        },
        {
            'Id': 3,
            'Status': 'Open',
            'Summary': 'Arrange a web meeting with the customer to get new requirements.',
            'Type': 'Others',
            'Priority': 'Critical',
            'Tags': 'Meeting',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 4,
            'Status': 'InProgress',
            'Summary': 'Fix the issues reported in the IE browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'IE',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 5,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported by the customer.',
            'Type': 'Bug',
            'Priority': 'Low',
            'Tags': 'Customer',
            'Estimate': '3.5',
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 6,
            'Status': 'Close',
            'Summary': 'Arrange a web meeting with the customer to get the login page requirements.',
            'Type': 'Others',
            'Priority': 'Low',
            'Tags': 'Meeting',
            'Estimate': 2,
            'Assignee': 'Michael Suyama',
            'RankId': 1
        },
        {
            'Id': 7,
            'Status': 'Validate',
            'Summary': 'Validate new requirements',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Robert King',
            'RankId': 1
        },
        {
            'Id': 8,
            'Status': 'Close',
            'Summary': 'Login page validation',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Validation,Fix',
            'Estimate': 2.5,
            'Assignee': 'Laura Callahan',
            'RankId': 2
        },
        {
            'Id': 9,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in Safari browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'Fix,Safari',
            'Estimate': 1.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 2
        },
        {
            'Id': 10,
            'Status': 'Close',
            'Summary': 'Test the application in the IE browser.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Testing,IE',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 3
        },
        {
            'Id': 11,
            'Status': 'Validate',
            'Summary': 'Validate the issues reported by the customer.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Validation,Fix',
            'Estimate': 1,
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 12,
            'Status': 'Testing',
            'Summary': 'Check Login page validation.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Testing',
            'Estimate': 0.5,
            'Assignee': 'Michael Suyama',
            'RankId': 3
        },
        {
            'Id': 13,
            'Status': 'Open',
            'Summary': 'API improvements.',
            'Type': 'Improvement',
            'Priority': 'High',
            'Tags': 'Grid,API',
            'Estimate': 3.5,
            'Assignee': 'Robert King',
            'RankId': 3
        },
        {
            'Id': 14,
            'Status': 'InProgress',
            'Summary': 'Add responsive support to application',
            'Type': 'Epic',
            'Priority': 'Critical',
            'Tags': 'Responsive',
            'Estimate': 6,
            'Assignee': 'Laura Callahan',
            'RankId': 3
        },
        {
            'Id': 15,
            'Status': 'Open',
            'Summary': 'Show the retrieved data from the server in grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Database,SQL',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 4
        },
        {
            'Id': 16,
            'Status': 'InProgress',
            'Summary': 'Fix cannot open user’s default database SQL error.',
            'Priority': 'Critical',
            'Type': 'Bug',
            'Tags': 'Database,Sql2008',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 17,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in data binding.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Databinding',
            'Estimate': '3.5',
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 18,
            'Status': 'Close',
            'Summary': 'Analyze SQL server 2008 connection.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Grid,Sql',
            'Estimate': 2,
            'Assignee': 'Andrew Fuller',
            'RankId': 4
        },
        {
            'Id': 19,
            'Status': 'Validate',
            'Summary': 'Validate databinding issues.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 1
        },
        {
            'Id': 20,
            'Status': 'Close',
            'Summary': 'Analyze grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Analyze',
            'Estimate': 2.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 5
        },
        {
            'Id': 21,
            'Status': 'Close',
            'Summary': 'Stored procedure for initial data binding of the grid.',
            'Type': 'Others',
            'Priority': 'Release Breaker',
            'Tags': 'Databinding',
            'Estimate': 1.5,
            'Assignee': 'Steven walker',
            'RankId': 6
        },
        {
            'Id': 22,
            'Status': 'Close',
            'Summary': 'Analyze stored procedures.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Procedures',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 7
        },
        {
            'Id': 23,
            'Status': 'Validate',
            'Summary': 'Validate editing issues.',
            'Type': 'Story',
            'Priority': 'Critical',
            'Tags': 'Editing',
            'Estimate': 1,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 24,
            'Status': 'Testing',
            'Summary': 'Test editing functionality.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Editing,Test',
            'Estimate': 0.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 5
        },
        {
            'Id': 25,
            'Status': 'Open',
            'Summary': 'Enhance editing functionality.',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Editing',
            'Estimate': 3.5,
            'Assignee': 'Andrew Fuller',
            'RankId': 5
        }
    ];
});

Fields Validation

The dialog fields can be validated while click on the Save button. This can be achieved by using validationRules property.

Source
Preview
app.vue
datasource.js
Copied to clipboard
<template>
  <div id="app">
   <ejs-kanban id="kanban" keyField="Status" :dataSource="kanbanData"
    :cardSettings="cardSettings" :dialogSettings="dialogSettings">
      <e-columns>
        <e-column headerText="To Do" keyField="Open"></e-column>
        <e-column headerText="In Progress" keyField="InProgress"></e-column>
        <e-column headerText="Testing" keyField="Testing"></e-column>
        <e-column headerText="Done" keyField="Close"></e-column>
      </e-columns>
    </ejs-kanban>
  </div>
</template>

<script>
import Vue from "vue";
import { KanbanPlugin } from '@syncfusion/ej2-vue-kanban';
import { extend } from '@syncfusion/ej2-base';
import { kanbanData } from './datasource.js';
Vue.use(KanbanPlugin);
export default {
  data: function() {
return {
  kanbanData: extend([], kanbanData, null, true),
  cardSettings: {
    contentField: "Summary",
    headerField: "Id",
  },
  dialogSettings: {
    fields: [
        { text: 'ID', key: 'Id', type: 'Input' },
        { key: 'Status', type: 'DropDown' },
        { key: 'Estimate', type: 'Numeric', validationRules: { range: [0, 1000] } },
        { key: 'Summary', type: 'TextArea', validationRules: { required: true } }
    ]
  }
};
  },
}
</script>
<style>
@import '../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material.css';
@import '../node_modules/@syncfusion/ej2-layouts/styles/material.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material.css';
@import '../node_modules/@syncfusion/ej2-vue-kanban/styles/material.css';
</style>
Copied to clipboard
define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.kanbanData = [
        {
            'Id': 1,
            'Status': 'Open',
            'Summary': 'Analyze the new requirements gathered from the customer.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Analyze,Customer',
            'Estimate': 3.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 2,
            'Status': 'InProgress',
            'Summary': 'Improve application performance',
            'Type': 'Improvement',
            'Priority': 'Normal',
            'Tags': 'Improvement',
            'Estimate': 6,
            'Assignee': 'Andrew Fuller',
            'RankId': 1
        },
        {
            'Id': 3,
            'Status': 'Open',
            'Summary': 'Arrange a web meeting with the customer to get new requirements.',
            'Type': 'Others',
            'Priority': 'Critical',
            'Tags': 'Meeting',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 4,
            'Status': 'InProgress',
            'Summary': 'Fix the issues reported in the IE browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'IE',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 5,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported by the customer.',
            'Type': 'Bug',
            'Priority': 'Low',
            'Tags': 'Customer',
            'Estimate': '3.5',
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 6,
            'Status': 'Close',
            'Summary': 'Arrange a web meeting with the customer to get the login page requirements.',
            'Type': 'Others',
            'Priority': 'Low',
            'Tags': 'Meeting',
            'Estimate': 2,
            'Assignee': 'Michael Suyama',
            'RankId': 1
        },
        {
            'Id': 7,
            'Status': 'Validate',
            'Summary': 'Validate new requirements',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Robert King',
            'RankId': 1
        },
        {
            'Id': 8,
            'Status': 'Close',
            'Summary': 'Login page validation',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Validation,Fix',
            'Estimate': 2.5,
            'Assignee': 'Laura Callahan',
            'RankId': 2
        },
        {
            'Id': 9,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in Safari browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'Fix,Safari',
            'Estimate': 1.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 2
        },
        {
            'Id': 10,
            'Status': 'Close',
            'Summary': 'Test the application in the IE browser.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Testing,IE',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 3
        },
        {
            'Id': 11,
            'Status': 'Validate',
            'Summary': 'Validate the issues reported by the customer.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Validation,Fix',
            'Estimate': 1,
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 12,
            'Status': 'Testing',
            'Summary': 'Check Login page validation.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Testing',
            'Estimate': 0.5,
            'Assignee': 'Michael Suyama',
            'RankId': 3
        },
        {
            'Id': 13,
            'Status': 'Open',
            'Summary': 'API improvements.',
            'Type': 'Improvement',
            'Priority': 'High',
            'Tags': 'Grid,API',
            'Estimate': 3.5,
            'Assignee': 'Robert King',
            'RankId': 3
        },
        {
            'Id': 14,
            'Status': 'InProgress',
            'Summary': 'Add responsive support to application',
            'Type': 'Epic',
            'Priority': 'Critical',
            'Tags': 'Responsive',
            'Estimate': 6,
            'Assignee': 'Laura Callahan',
            'RankId': 3
        },
        {
            'Id': 15,
            'Status': 'Open',
            'Summary': 'Show the retrieved data from the server in grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Database,SQL',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 4
        },
        {
            'Id': 16,
            'Status': 'InProgress',
            'Summary': 'Fix cannot open user’s default database SQL error.',
            'Priority': 'Critical',
            'Type': 'Bug',
            'Tags': 'Database,Sql2008',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 17,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in data binding.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Databinding',
            'Estimate': '3.5',
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 18,
            'Status': 'Close',
            'Summary': 'Analyze SQL server 2008 connection.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Grid,Sql',
            'Estimate': 2,
            'Assignee': 'Andrew Fuller',
            'RankId': 4
        },
        {
            'Id': 19,
            'Status': 'Validate',
            'Summary': 'Validate databinding issues.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 1
        },
        {
            'Id': 20,
            'Status': 'Close',
            'Summary': 'Analyze grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Analyze',
            'Estimate': 2.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 5
        },
        {
            'Id': 21,
            'Status': 'Close',
            'Summary': 'Stored procedure for initial data binding of the grid.',
            'Type': 'Others',
            'Priority': 'Release Breaker',
            'Tags': 'Databinding',
            'Estimate': 1.5,
            'Assignee': 'Steven walker',
            'RankId': 6
        },
        {
            'Id': 22,
            'Status': 'Close',
            'Summary': 'Analyze stored procedures.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Procedures',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 7
        },
        {
            'Id': 23,
            'Status': 'Validate',
            'Summary': 'Validate editing issues.',
            'Type': 'Story',
            'Priority': 'Critical',
            'Tags': 'Editing',
            'Estimate': 1,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 24,
            'Status': 'Testing',
            'Summary': 'Test editing functionality.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Editing,Test',
            'Estimate': 0.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 5
        },
        {
            'Id': 25,
            'Status': 'Open',
            'Summary': 'Enhance editing functionality.',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Editing',
            'Estimate': 3.5,
            'Assignee': 'Andrew Fuller',
            'RankId': 5
        }
    ];
});

Dialog Template

Using the dialog template, you can render your own dialog by defining the template property. Initialize the template as SCRIPT element Id or HTML string which holds the template and map it to the template property.

Source
Preview
app.vue
datasource.js
Copied to clipboard
<template>
  <div id="app">
   <ejs-kanban id="kanban" keyField="Status" :dataSource="kanbanData"
    :cardSettings="cardSettings" :dialogSettings="dialogSettings">
      <e-columns>
        <e-column headerText="To Do" keyField="Open"></e-column>
        <e-column headerText="In Progress" keyField="InProgress"></e-column>
        <e-column headerText="Testing" keyField="Testing"></e-column>
        <e-column headerText="Done" keyField="Close"></e-column>
      </e-columns>
    </ejs-kanban>
  </div>
</template>

<script>
import Vue from "vue";
import { KanbanPlugin } from '@syncfusion/ej2-vue-kanban';
import { extend } from '@syncfusion/ej2-base';
import { kanbanData } from './datasource.js';
Vue.use(KanbanPlugin);

var ContentTemplate = Vue.component("dialogTemplate", {
  template: `<div>
<table>
    <tbody>
        <tr>
            <td class="e-label">ID</td>
            <td>
              <div class="e-float-input e-control-wrapper">
                <input id="Id" name="Id" type="text" class="e-field" v-model='data.Id' disabled />
              </div>
            </td>
        </tr>
        <tr>
            <td class="e-label">Status</td>
            <td>
              <ejs-dropdownlist id="Status" name="Status" class="e-field" v-model='data.Status' :dataSource="dataSource1" placeholder="Status"></ejs-dropdownlist>
            </td>
        </tr>
        <tr>
            <td class="e-label">Assignee</td>
            <td>
              <ejs-dropdownlist id="Assignee" name="Assignee" v-model='data.Assignee' class="e-field" :dataSource="dataSource2" placeholder="Assignee"></ejs-dropdownlist>
            </td>
        </tr>
        <tr>
            <td class="e-label">Priority</td>
            <td>
              <ejs-dropdownlist type="text" name="Priority" id="Priority" v-model='data.Priority' popupHeight="300px" class="e-field" placeholder="Priority" :dataSource="dataSource3"></ejs-dropdownlist>
            </td>
        </tr>
        <tr>
            <td class="e-label">Summary</td>
            <td>
              <div class="e-float-input e-control-wrapper">
                <textarea type="text" name="Summary" id="Summary" class="e-field" v-model='data.Summary'></textarea>
              </div>
            </td>
        </tr>
    </tbody>
</table>
</div>`,
  data() {
var statusData = [
  { text: "Open" },
  { text: "InProgress" },
  { text: "Testing" },
  { text: "Close" }
];
var priorityData = ["Low", "Normal", "Critical", "Release Breaker", "High"];
var assigneeData = [
  "Nancy Davloio",
  "Andrew Fuller",
  "Janet Leverling",
  "Steven walker",
  "Robert King",
  "Margaret hamilt",
  "Michael Suyama"
];
return {
  dataSource1: statusData,
  dataSource2: assigneeData,
  dataSource3: priorityData,
  data: {}
};
  }
});

export default {
  data: function() {
return {
  kanbanData: extend([], kanbanData, null, true),
  cardSettings: {
    contentField: "Summary",
    headerField: "Id",
  },
  dialogSettings: {
    template: function() {
      return { template: ContentTemplate };
    }
  }
};
  },
}
</script>
<style>
@import '../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material.css';
@import '../node_modules/@syncfusion/ej2-layouts/styles/material.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material.css';
@import '../node_modules/@syncfusion/ej2-vue-kanban/styles/material.css';
</style>
Copied to clipboard
define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.kanbanData = [
        {
            'Id': 1,
            'Status': 'Open',
            'Summary': 'Analyze the new requirements gathered from the customer.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Analyze,Customer',
            'Estimate': 3.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 2,
            'Status': 'InProgress',
            'Summary': 'Improve application performance',
            'Type': 'Improvement',
            'Priority': 'Normal',
            'Tags': 'Improvement',
            'Estimate': 6,
            'Assignee': 'Andrew Fuller',
            'RankId': 1
        },
        {
            'Id': 3,
            'Status': 'Open',
            'Summary': 'Arrange a web meeting with the customer to get new requirements.',
            'Type': 'Others',
            'Priority': 'Critical',
            'Tags': 'Meeting',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 4,
            'Status': 'InProgress',
            'Summary': 'Fix the issues reported in the IE browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'IE',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 5,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported by the customer.',
            'Type': 'Bug',
            'Priority': 'Low',
            'Tags': 'Customer',
            'Estimate': '3.5',
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 6,
            'Status': 'Close',
            'Summary': 'Arrange a web meeting with the customer to get the login page requirements.',
            'Type': 'Others',
            'Priority': 'Low',
            'Tags': 'Meeting',
            'Estimate': 2,
            'Assignee': 'Michael Suyama',
            'RankId': 1
        },
        {
            'Id': 7,
            'Status': 'Validate',
            'Summary': 'Validate new requirements',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Robert King',
            'RankId': 1
        },
        {
            'Id': 8,
            'Status': 'Close',
            'Summary': 'Login page validation',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Validation,Fix',
            'Estimate': 2.5,
            'Assignee': 'Laura Callahan',
            'RankId': 2
        },
        {
            'Id': 9,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in Safari browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'Fix,Safari',
            'Estimate': 1.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 2
        },
        {
            'Id': 10,
            'Status': 'Close',
            'Summary': 'Test the application in the IE browser.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Testing,IE',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 3
        },
        {
            'Id': 11,
            'Status': 'Validate',
            'Summary': 'Validate the issues reported by the customer.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Validation,Fix',
            'Estimate': 1,
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 12,
            'Status': 'Testing',
            'Summary': 'Check Login page validation.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Testing',
            'Estimate': 0.5,
            'Assignee': 'Michael Suyama',
            'RankId': 3
        },
        {
            'Id': 13,
            'Status': 'Open',
            'Summary': 'API improvements.',
            'Type': 'Improvement',
            'Priority': 'High',
            'Tags': 'Grid,API',
            'Estimate': 3.5,
            'Assignee': 'Robert King',
            'RankId': 3
        },
        {
            'Id': 14,
            'Status': 'InProgress',
            'Summary': 'Add responsive support to application',
            'Type': 'Epic',
            'Priority': 'Critical',
            'Tags': 'Responsive',
            'Estimate': 6,
            'Assignee': 'Laura Callahan',
            'RankId': 3
        },
        {
            'Id': 15,
            'Status': 'Open',
            'Summary': 'Show the retrieved data from the server in grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Database,SQL',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 4
        },
        {
            'Id': 16,
            'Status': 'InProgress',
            'Summary': 'Fix cannot open user’s default database SQL error.',
            'Priority': 'Critical',
            'Type': 'Bug',
            'Tags': 'Database,Sql2008',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 17,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in data binding.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Databinding',
            'Estimate': '3.5',
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 18,
            'Status': 'Close',
            'Summary': 'Analyze SQL server 2008 connection.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Grid,Sql',
            'Estimate': 2,
            'Assignee': 'Andrew Fuller',
            'RankId': 4
        },
        {
            'Id': 19,
            'Status': 'Validate',
            'Summary': 'Validate databinding issues.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 1
        },
        {
            'Id': 20,
            'Status': 'Close',
            'Summary': 'Analyze grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Analyze',
            'Estimate': 2.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 5
        },
        {
            'Id': 21,
            'Status': 'Close',
            'Summary': 'Stored procedure for initial data binding of the grid.',
            'Type': 'Others',
            'Priority': 'Release Breaker',
            'Tags': 'Databinding',
            'Estimate': 1.5,
            'Assignee': 'Steven walker',
            'RankId': 6
        },
        {
            'Id': 22,
            'Status': 'Close',
            'Summary': 'Analyze stored procedures.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Procedures',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 7
        },
        {
            'Id': 23,
            'Status': 'Validate',
            'Summary': 'Validate editing issues.',
            'Type': 'Story',
            'Priority': 'Critical',
            'Tags': 'Editing',
            'Estimate': 1,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 24,
            'Status': 'Testing',
            'Summary': 'Test editing functionality.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Editing,Test',
            'Estimate': 0.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 5
        },
        {
            'Id': 25,
            'Status': 'Open',
            'Summary': 'Enhance editing functionality.',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Editing',
            'Estimate': 3.5,
            'Assignee': 'Andrew Fuller',
            'RankId': 5
        }
    ];
});

Prevent Dialog

The Kanban allows to prevent to open a dialog on card double-click by enabling args.cancel in dialogOpen event.

Source
Preview
app.vue
datasource.js
Copied to clipboard
<template>
  <div id="app">
   <ejs-kanban id="kanban" keyField="Status" :dataSource="kanbanData"
    :cardSettings="cardSettings" :dialogOpen="dialogOpen">
      <e-columns>
        <e-column headerText="To Do" keyField="Open"></e-column>
        <e-column headerText="In Progress" keyField="InProgress"></e-column>
        <e-column headerText="Testing" keyField="Testing"></e-column>
        <e-column headerText="Done" keyField="Close"></e-column>
      </e-columns>
    </ejs-kanban>
  </div>
</template>

<script>
import Vue from "vue";
import { KanbanPlugin } from '@syncfusion/ej2-vue-kanban';
import { extend } from '@syncfusion/ej2-base';
import { kanbanData } from './datasource.js';
Vue.use(KanbanPlugin);
export default {
  data: function() {
return {
  kanbanData: extend([], kanbanData, null, true),
  cardSettings: {
    contentField: "Summary",
    headerField: "Id",
  },
  dialogOpen: function (args) {
    args.cancel = true;
  }
};
  },
}
</script>
<style>
@import '../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material.css';
@import '../node_modules/@syncfusion/ej2-layouts/styles/material.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material.css';
@import '../node_modules/@syncfusion/ej2-vue-kanban/styles/material.css';
</style>
Copied to clipboard
define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.kanbanData = [
        {
            'Id': 1,
            'Status': 'Open',
            'Summary': 'Analyze the new requirements gathered from the customer.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Analyze,Customer',
            'Estimate': 3.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 2,
            'Status': 'InProgress',
            'Summary': 'Improve application performance',
            'Type': 'Improvement',
            'Priority': 'Normal',
            'Tags': 'Improvement',
            'Estimate': 6,
            'Assignee': 'Andrew Fuller',
            'RankId': 1
        },
        {
            'Id': 3,
            'Status': 'Open',
            'Summary': 'Arrange a web meeting with the customer to get new requirements.',
            'Type': 'Others',
            'Priority': 'Critical',
            'Tags': 'Meeting',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 4,
            'Status': 'InProgress',
            'Summary': 'Fix the issues reported in the IE browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'IE',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 2
        },
        {
            'Id': 5,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported by the customer.',
            'Type': 'Bug',
            'Priority': 'Low',
            'Tags': 'Customer',
            'Estimate': '3.5',
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 6,
            'Status': 'Close',
            'Summary': 'Arrange a web meeting with the customer to get the login page requirements.',
            'Type': 'Others',
            'Priority': 'Low',
            'Tags': 'Meeting',
            'Estimate': 2,
            'Assignee': 'Michael Suyama',
            'RankId': 1
        },
        {
            'Id': 7,
            'Status': 'Validate',
            'Summary': 'Validate new requirements',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Robert King',
            'RankId': 1
        },
        {
            'Id': 8,
            'Status': 'Close',
            'Summary': 'Login page validation',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Validation,Fix',
            'Estimate': 2.5,
            'Assignee': 'Laura Callahan',
            'RankId': 2
        },
        {
            'Id': 9,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in Safari browser.',
            'Type': 'Bug',
            'Priority': 'Release Breaker',
            'Tags': 'Fix,Safari',
            'Estimate': 1.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 2
        },
        {
            'Id': 10,
            'Status': 'Close',
            'Summary': 'Test the application in the IE browser.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Testing,IE',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 3
        },
        {
            'Id': 11,
            'Status': 'Validate',
            'Summary': 'Validate the issues reported by the customer.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Validation,Fix',
            'Estimate': 1,
            'Assignee': 'Steven walker',
            'RankId': 1
        },
        {
            'Id': 12,
            'Status': 'Testing',
            'Summary': 'Check Login page validation.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Testing',
            'Estimate': 0.5,
            'Assignee': 'Michael Suyama',
            'RankId': 3
        },
        {
            'Id': 13,
            'Status': 'Open',
            'Summary': 'API improvements.',
            'Type': 'Improvement',
            'Priority': 'High',
            'Tags': 'Grid,API',
            'Estimate': 3.5,
            'Assignee': 'Robert King',
            'RankId': 3
        },
        {
            'Id': 14,
            'Status': 'InProgress',
            'Summary': 'Add responsive support to application',
            'Type': 'Epic',
            'Priority': 'Critical',
            'Tags': 'Responsive',
            'Estimate': 6,
            'Assignee': 'Laura Callahan',
            'RankId': 3
        },
        {
            'Id': 15,
            'Status': 'Open',
            'Summary': 'Show the retrieved data from the server in grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Database,SQL',
            'Estimate': 5.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 4
        },
        {
            'Id': 16,
            'Status': 'InProgress',
            'Summary': 'Fix cannot open user’s default database SQL error.',
            'Priority': 'Critical',
            'Type': 'Bug',
            'Tags': 'Database,Sql2008',
            'Estimate': 2.5,
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 17,
            'Status': 'Testing',
            'Summary': 'Fix the issues reported in data binding.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Databinding',
            'Estimate': '3.5',
            'Assignee': 'Janet Leverling',
            'RankId': 4
        },
        {
            'Id': 18,
            'Status': 'Close',
            'Summary': 'Analyze SQL server 2008 connection.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Grid,Sql',
            'Estimate': 2,
            'Assignee': 'Andrew Fuller',
            'RankId': 4
        },
        {
            'Id': 19,
            'Status': 'Validate',
            'Summary': 'Validate databinding issues.',
            'Type': 'Story',
            'Priority': 'Low',
            'Tags': 'Validation',
            'Estimate': 1.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 1
        },
        {
            'Id': 20,
            'Status': 'Close',
            'Summary': 'Analyze grid control.',
            'Type': 'Story',
            'Priority': 'High',
            'Tags': 'Analyze',
            'Estimate': 2.5,
            'Assignee': 'Margaret hamilt',
            'RankId': 5
        },
        {
            'Id': 21,
            'Status': 'Close',
            'Summary': 'Stored procedure for initial data binding of the grid.',
            'Type': 'Others',
            'Priority': 'Release Breaker',
            'Tags': 'Databinding',
            'Estimate': 1.5,
            'Assignee': 'Steven walker',
            'RankId': 6
        },
        {
            'Id': 22,
            'Status': 'Close',
            'Summary': 'Analyze stored procedures.',
            'Type': 'Story',
            'Priority': 'Release Breaker',
            'Tags': 'Procedures',
            'Estimate': 5.5,
            'Assignee': 'Janet Leverling',
            'RankId': 7
        },
        {
            'Id': 23,
            'Status': 'Validate',
            'Summary': 'Validate editing issues.',
            'Type': 'Story',
            'Priority': 'Critical',
            'Tags': 'Editing',
            'Estimate': 1,
            'Assignee': 'Nancy Davloio',
            'RankId': 1
        },
        {
            'Id': 24,
            'Status': 'Testing',
            'Summary': 'Test editing functionality.',
            'Type': 'Story',
            'Priority': 'Normal',
            'Tags': 'Editing,Test',
            'Estimate': 0.5,
            'Assignee': 'Nancy Davloio',
            'RankId': 5
        },
        {
            'Id': 25,
            'Status': 'Open',
            'Summary': 'Enhance editing functionality.',
            'Type': 'Improvement',
            'Priority': 'Low',
            'Tags': 'Editing',
            'Estimate': 3.5,
            'Assignee': 'Andrew Fuller',
            'RankId': 5
        }
    ];
});

Persisting data in server

The modified card data can be persisted in the database using the RESTful web services. All the CRUD operations in the Kanban are done through DataManager. The DataManager has an option to bind all the CRUD related data in server-side.

For your information, the ODataAdaptor persists data in the server as per OData protocol.

In the below section covers how to get the edited data details on the server-side using the UrlAdaptor.

URL adaptor

You can use the UrlAdaptor of DataManager when binding data source for remote data. In the initial load of Kanban, data are fetched from remote data and bound to the Kanban using url property of DataManager.

You can map the CRUD operation in Kanban can be mapped to server-side controller actions using the properties insertUrl, removeUrl, updateUrl, and crudUrl.

  • insertUrl – You can perform single insertion operation on server-side.
  • updateUrl – You can update single data on server-side.
  • removeUrl – You can remove single data on server-side.
  • crudUrl – You can perform bulk data operation on server-side.

The following code example describes the above behavior.

Copied to clipboard
<template>
  <div id="app">
   <ejs-kanban id="kanban" keyField="Status" :dataSource="kanbanData"
    :cardSettings="cardSettings">
      <e-columns>
        <e-column headerText="To Do" keyField="Open"></e-column>
        <e-column headerText="In Progress" keyField="InProgress"></e-column>
        <e-column headerText="Testing" keyField="Testing"></e-column>
        <e-column headerText="Done" keyField="Close"></e-column>
      </e-columns>
    </ejs-kanban>
  </div>
</template>

<script>
import Vue from "vue";
import { KanbanPlugin } from '@syncfusion/ej2-vue-kanban';
import { DataManager, UrlAdaptor } from "@syncfusion/ej2-data";
Vue.use(KanbanPlugin);
export default {
  data: function() {
return {
    kanbanData: new DataManager({
      url: 'Home/DataSource',
      updateUrl: 'Home/Update',
      insertUrl: 'Home/Insert',
      removeUrl: 'Home/Delete',
      adaptor: new UrlAdaptor(),
      crossDomain: true
    });
    cardSettings: {
        contentField: "Summary",
        headerField: "Id",
    }
};
  }
}
</script>
<style>
@import '../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material.css';
@import '../node_modules/@syncfusion/ej2-layouts/styles/material.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material.css';
@import '../node_modules/@syncfusion/ej2-vue-kanban/styles/material.css';
</style>

The server-side controller code to handle the CRUD operations are as follows.

Copied to clipboard
private NORTHWNDEntities db = new NORTHWNDEntities();

public ActionResult DataSource() {
var DataSource = db.Tasks.ToList();
return Json(DataSource, JsonRequestBehavior.AllowGet);
}
public ActionResult Insert(Params value) {
//Insert card data into the database
return Json(value, JsonRequestBehavior.AllowGet);
}
public ActionResult Update(Params value) {
//Update card data into the database
return Json(value, JsonRequestBehavior.AllowGet);
}
public void Delete(Params value) {
//Delete card data from the database
}

public class Params {
public int Id { get; set; }
public string Status { get; set; }
public string Summary { get; set; }
public string Assignee { get; set; }
}

Insert card

Using the insertUrl property, you can specify the controller action mapping URL to perform insert operation on the server-side.

The following code example describes the above behavior.

Copied to clipboard
public ActionResult Insert(Params value)
{
//Insert card in the database
}

The newly added record details are bound to the value parameter.

Update card

Using the updateUrl property, the controller action mapping URL can be specified to perform save/update operation on the server-side.

The following code example describes the above behavior.

Copied to clipboard
public ActionResult Update(Params value)
{
//Update card data in the database
}

The updated record details are bound to the value parameter.

Delete card

Using the removeUrl property, the controller action mapping URL can be specified to perform delete operation on the server-side.

The following code example describes the above behavior.

Copied to clipboard
public void Delete(int key)
{
//Delete card in the database
}

The deleted card primary key value is bound to the key parameter.

CRUD URL

Using the crudUrl property, the controller action mapping URL can be specified to perform all the CRUD operations at the server-side using a single method instead of specifying a separate controller action method for CRUD (insert, update and delete) operations.

The action parameter of crudUrl is used to get the corresponding CRUD action.

The following code example describes the above behavior.

Copied to clipboard
<template>
  <div id="app">
   <ejs-kanban id="kanban" keyField="Status" :dataSource="kanbanData"
    :cardSettings="cardSettings">
      <e-columns>
        <e-column headerText="To Do" keyField="Open"></e-column>
        <e-column headerText="In Progress" keyField="InProgress"></e-column>
        <e-column headerText="Testing" keyField="Testing"></e-column>
        <e-column headerText="Done" keyField="Close"></e-column>
      </e-columns>
    </ejs-kanban>
  </div>
</template>

<script>
import Vue from "vue";
import { KanbanPlugin } from '@syncfusion/ej2-vue-kanban';
import { DataManager, UrlAdaptor } from "@syncfusion/ej2-data";
Vue.use(KanbanPlugin);
export default {
  data: function() {
return {
    kanbanData: new DataManager({
        url: 'Home/DataSource',
        updateUrl: 'Home/UpdateData',
        insertUrl: 'Home/UpdateData',
        removeUrl: 'Home/UpdateData',
        crudUrl: 'Home/UpdateData',
        adaptor: new UrlAdaptor(),
        crossDomain: true
    });
    cardSettings: {
        contentField: "Summary",
        headerField: "Id",
    }
};
  }
}
</script>
<style>
@import '../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material.css';
@import '../node_modules/@syncfusion/ej2-layouts/styles/material.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material.css';
@import '../node_modules/@syncfusion/ej2-vue-kanban/styles/material.css';
</style>
Copied to clipboard
private NORTHWNDEntities db = new NORTHWNDEntities();
public ActionResult DataSource() {
var DataSource = db.Tasks.ToList();
return Json(DataSource, JsonRequestBehavior.AllowGet);
}
public ActionResult UpdateData(EditParams param) {
if (param.action == "insert" || (param.action == "batch" && param.added != null)) {
    if (param.action == "insert") {
        db.Tasks.Add(param.value);
    } else {
        foreach (var temp in param.added) {
            db.Tasks.Add(temp);
        }
    }
}
if (param.action == "update" || (param.action == "batch" && param.changed != null)) {
    if (param.action == "update") {
        Task old = db.Tasks.Where(o => o.Id == param.value.Id).SingleOrDefault();
        if (old != null) {
            db.Entry(old).CurrentValues.SetValues(param.value);
        }
    } else {
        foreach (var temp in param.changed) {
            Task old = db.Tasks.Where(o => o.Id == temp.Id).SingleOrDefault();
            if (old != null) {
                db.Entry(old).CurrentValues.SetValues(temp);
            }
        }
    }
}
if (param.action == "remove" || (param.action == "batch" && param.deleted != null)) {
    if (param.action == "remove") {
        int key = Convert.ToInt32(param.key);
        db.Tasks.Remove(db.Tasks.Where(o => o.Id == key).SingleOrDefault());
    } else {
        foreach (var temp in param.deleted) {
            db.Tasks.Remove(db.Tasks.Where(o => o.Id == temp.Id).SingleOrDefault());
        }
    }
}
db.SaveChanges();
return Json(param, JsonRequestBehavior.AllowGet);
}

public class EditParams {
public string key { get; set; }
public string action { get; set; }
public List<Tasks> added { get; set; }
public List<Tasks> changed { get; set; }
public List<Tasks> deleted { get; set; }
public Tasks value { get; set; }
}

The crudUrl is used to update the bulk data sent to the server-side. Multiple selections and sortBy as Index properties are used for crudUrl properties to update the modified bulk data to the server-side.