Skip to content

Commit 325d095

Browse files
Vue Tree Grid selection sample
Vue Tree Grid selection sample
1 parent 88036a9 commit 325d095

File tree

13 files changed

+416
-1
lines changed

13 files changed

+416
-1
lines changed

README.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,20 @@
1-
# how-to-enable-selection-in-the-vue-tree-grid-component
1+
# How to enable selection in the Vue Tree Grid Component
2+
23
A quick-start project that shows how to enable selection options in Vue Tree Grid, and enable different selection types and modes. This project also contains simple code to render checkboxes and toggle selection.
4+
5+
Refer to the following documentation on selection in the Syncfusion Vue Tree Grid component:
6+
https://ej2.syncfusion.com/vue/documentation/treegrid/selection/selection/
7+
8+
Check out this online selection example of the Syncfusion Vue Tree Grid component:
9+
https://ej2.syncfusion.com/vue/demos/#/bootstrap5/tree-grid/selection.html
10+
11+
Refer to the following Syncfusion Vue Tree Grid getting started video:
12+
https://www.youtube.com/watch?v=FEMyOHKjjao
13+
14+
## Project prerequisites
15+
16+
Make sure that you have the latest versions of Vue, Node, Vue Class Component, and Visual Studio Code in your machine before starting to work on this project.
17+
18+
### How to run this application?
19+
20+
To run this application, you need to clone the `how-to-enable-selection-in-the-vue-tree-grid-component` repository and then open it in Visual Studio Code. Now, simply install all the necessary react packages into your current project using the `npm install` command and run your project using the `npm run serve` command.

babel.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
presets: [
3+
'@vue/cli-plugin-babel/preset'
4+
]
5+
}

jsconfig.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"compilerOptions": {
3+
"target": "es5",
4+
"module": "esnext",
5+
"baseUrl": "./",
6+
"moduleResolution": "node",
7+
"paths": {
8+
"@/*": [
9+
"src/*"
10+
]
11+
},
12+
"lib": [
13+
"esnext",
14+
"dom",
15+
"dom.iterable",
16+
"scripthost"
17+
]
18+
}
19+
}

package.json

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{
2+
"name": "myvueproject",
3+
"version": "0.1.0",
4+
"private": true,
5+
"scripts": {
6+
"serve": "vue-cli-service serve",
7+
"build": "vue-cli-service build",
8+
"lint": "vue-cli-service lint"
9+
},
10+
"dependencies": {
11+
"@syncfusion/ej2-vue-buttons": "^20.2.46",
12+
"@syncfusion/ej2-vue-grids": "^20.2.45",
13+
"@syncfusion/ej2-vue-treegrid": "^20.2.49",
14+
"core-js": "^3.8.3",
15+
"vue": "^3.2.13",
16+
"vue-class-component": "^8.0.0-rc.1"
17+
},
18+
"devDependencies": {
19+
"@babel/core": "^7.12.16",
20+
"@babel/eslint-parser": "^7.12.16",
21+
"@vue/cli-plugin-babel": "~5.0.0",
22+
"@vue/cli-plugin-eslint": "~5.0.0",
23+
"@vue/cli-service": "~5.0.0",
24+
"eslint": "^7.32.0",
25+
"eslint-plugin-vue": "^8.0.3"
26+
},
27+
"eslintConfig": {
28+
"root": true,
29+
"env": {
30+
"node": true
31+
},
32+
"extends": [
33+
"plugin:vue/vue3-essential",
34+
"eslint:recommended"
35+
],
36+
"parserOptions": {
37+
"parser": "@babel/eslint-parser"
38+
},
39+
"rules": {}
40+
},
41+
"browserslist": [
42+
"> 1%",
43+
"last 2 versions",
44+
"not dead",
45+
"not ie 11"
46+
]
47+
}

public/favicon.ico

4.19 KB
Binary file not shown.

public/index.html

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html lang="">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
6+
<meta name="viewport" content="width=device-width,initial-scale=1.0">
7+
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
8+
<title><%= htmlWebpackPlugin.options.title %></title>
9+
</head>
10+
<body>
11+
<noscript>
12+
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
13+
</noscript>
14+
<div id="app"></div>
15+
<!-- built files will be auto injected -->
16+
</body>
17+
</html>

src/App.vue

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<template>
2+
<ejs-button :onclick="btnClick" cssClass="e-btn">Selection API</ejs-button>
3+
<ejs-treegrid :dataSource="data" ref="treegridObj"
4+
childMapping="subtasks"
5+
:treeColumnIndex="2"
6+
:selectionSettings="selectionOptions"
7+
:selectedRowIndex="2"
8+
:height='400'
9+
:allowPaging='true'
10+
:pageSettings='pageSettings'>
11+
<e-columns>
12+
<e-column type="Checkbox" width="50"></e-column>
13+
<e-column field='taskID' headerText='Task ID' width='80' textAlign='Right'></e-column>
14+
<e-column field='taskName' headerText='Task Name' width='190'></e-column>
15+
<e-column field='startDate' headerText='Start Date' width='100' format="yMd" textAlign='Right'></e-column>
16+
<e-column field='duration' headerText='Duration' width='90' textAlign='Right'></e-column>
17+
<e-column field='progress' headerText='Progress' width='90' textAlign='Right'></e-column>
18+
</e-columns>
19+
</ejs-treegrid>
20+
</template>
21+
22+
<script>
23+
import { TreeGridComponent, ColumnsDirective, ColumnDirective, Page} from "@syncfusion/ej2-vue-treegrid";
24+
import { ButtonComponent} from '@syncfusion/ej2-vue-buttons';
25+
import {sampleData} from './data.js';
26+
27+
export default{
28+
name: 'App',
29+
components: {
30+
'ejs-treegrid': TreeGridComponent,
31+
'e-columns': ColumnsDirective,
32+
'e-column': ColumnDirective,
33+
'ejs-button': ButtonComponent
34+
},
35+
data: () => {
36+
return {
37+
data: sampleData,
38+
// mode: "Cell", cellSelectionMode: "Box"
39+
selectionOptions: {type: "Multiple", checkboxOnly: false, checkboxMode: "ResetOnRowClick", enableToggle: false},
40+
pageSettings: { pageSize: 12 }
41+
}
42+
},
43+
methods: {
44+
btnClick: function(){
45+
let treegrid = this.$refs.treegridObj.ej2Instances;
46+
treegrid.selectRows([5,6,7]);
47+
//treegrid.clearSelection(); //To clear the selection
48+
}
49+
},
50+
provide:{
51+
treegrid:[Page]
52+
}
53+
}
54+
</script>
55+
56+
<style>
57+
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
58+
@import "../node_modules/@syncfusion/ej2-buttons/styles/material.css";
59+
@import "../node_modules/@syncfusion/ej2-calendars/styles/material.css";
60+
@import "../node_modules/@syncfusion/ej2-dropdowns/styles/material.css";
61+
@import "../node_modules/@syncfusion/ej2-inputs/styles/material.css";
62+
@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
63+
@import "../node_modules/@syncfusion/ej2-popups/styles/material.css";
64+
@import "../node_modules/@syncfusion/ej2-splitbuttons/styles/material.css";
65+
@import "../node_modules/@syncfusion/ej2-vue-grids/styles/material.css";
66+
@import "../node_modules/@syncfusion/ej2-vue-treegrid/styles/material.css";
67+
68+
.e-btn{
69+
margin: 1%;
70+
}
71+
</style>

src/__VLS_template.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { TreeGridComponent } from '@syncfusion/ej2-vue-treegrid';
2+
3+
export default (await import('vue')).defineComponent({
4+
name: 'App',
5+
components: {
6+
'ejs-treegrid': TreeGridComponent
7+
}
8+
});
9+
const __VLS_template = () => ({});

src/assets/logo.png

6.69 KB
Loading

src/components/HelloWorld.vue

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<template>
2+
<div class="hello">
3+
<h1>{{ msg }}</h1>
4+
<p>
5+
For a guide and recipes on how to configure / customize this project,<br>
6+
check out the
7+
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
8+
</p>
9+
<h3>Installed CLI Plugins</h3>
10+
<ul>
11+
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
12+
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
13+
</ul>
14+
<h3>Essential Links</h3>
15+
<ul>
16+
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
17+
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
18+
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
19+
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
20+
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
21+
</ul>
22+
<h3>Ecosystem</h3>
23+
<ul>
24+
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
25+
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
26+
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
27+
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
28+
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
29+
</ul>
30+
</div>
31+
</template>
32+
33+
<script>
34+
export default {
35+
name: 'HelloWorld',
36+
props: {
37+
msg: String
38+
}
39+
}
40+
</script>
41+
42+
<!-- Add "scoped" attribute to limit CSS to this component only -->
43+
<style scoped>
44+
h3 {
45+
margin: 40px 0 0;
46+
}
47+
ul {
48+
list-style-type: none;
49+
padding: 0;
50+
}
51+
li {
52+
display: inline-block;
53+
margin: 0 10px;
54+
}
55+
a {
56+
color: #42b983;
57+
}
58+
</style>

0 commit comments

Comments
 (0)