diff --git a/package-lock.json b/package-lock.json
index 6c4e69a1e451fd10822c9f2d5b5b3441fa98393f..f4dfd9ec2cbf0c30b714f145c2ac35ffcb80e9e6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4804,6 +4804,15 @@
       "integrity": "sha512-j9MlEwgTHVW/lq93Hw8yhzA886oLjDm3Hz7eDkWP2v4fzLVuqOWhpNluziSnmR/tBqgoYldagbLknrdg+B7Tlw==",
       "dev": true
     },
+    "element-ready": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/element-ready/-/element-ready-4.1.1.tgz",
+      "integrity": "sha512-GdMA0nVR8YL9adRU//YCwI0aunw4d8oI+9gSH2kJLwcdsYBoGUWbG79AGfvcmlUyLE+amZXOe1VX2nTlcsxYBQ==",
+      "requires": {
+        "many-keys-map": "^1.0.1",
+        "p-defer": "^3.0.0"
+      }
+    },
     "element-ui": {
       "version": "2.13.2",
       "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.13.2.tgz",
@@ -5920,6 +5929,33 @@
       "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
       "dev": true
     },
+    "gridjs": {
+      "version": "1.17.0",
+      "resolved": "https://registry.npmjs.org/gridjs/-/gridjs-1.17.0.tgz",
+      "integrity": "sha512-Y/Za65jbPUXlFi68Db0nBDK23lEzIeM0w7NHZHA0hjfF4yqkrKSTGvjE8e4rBcIoLK7Rf1XFnpKDOY19TBvS/g==",
+      "requires": {
+        "preact": "^10.4.8",
+        "tslib": "^2.0.1"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz",
+          "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ=="
+        }
+      }
+    },
+    "gridjs-vue": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/gridjs-vue/-/gridjs-vue-0.5.2.tgz",
+      "integrity": "sha512-0kOB8HR1B5tBVFJLyNNhicOZsaQblqVMC12nCJkdWQpZJH9s2JgXoocmj1KmoiCWzHrgKUoUmha349CVreLhjQ==",
+      "requires": {
+        "element-ready": "^4.1.1",
+        "gridjs": "^1.11.0",
+        "nanoid": "^3.1.10",
+        "vue-runtime-helpers": "1.1.2"
+      }
+    },
     "gzip-size": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
@@ -7343,6 +7379,11 @@
         "semver": "^5.6.0"
       }
     },
+    "many-keys-map": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/many-keys-map/-/many-keys-map-1.0.3.tgz",
+      "integrity": "sha512-Iguobalgc8YO1kbN1U9R/j6u3QFf6bwIh37HKYFgEtUJNJd79INgLwtdiiOgBPoBqZ/ZVc4zziRaVg0EiJ+82g=="
+    },
     "map-cache": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
@@ -7714,6 +7755,11 @@
       "dev": true,
       "optional": true
     },
+    "nanoid": {
+      "version": "3.1.12",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz",
+      "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A=="
+    },
     "nanomatch": {
       "version": "1.2.13",
       "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -8201,6 +8247,11 @@
       "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
       "dev": true
     },
+    "p-defer": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz",
+      "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw=="
+    },
     "p-finally": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@@ -9096,6 +9147,11 @@
       "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
       "dev": true
     },
+    "preact": {
+      "version": "10.5.4",
+      "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.4.tgz",
+      "integrity": "sha512-u0LnVtL9WWF61RLzIbEsVFOdsahoTQkQqeRwyf4eWuLMFrxTH/C47tqcnizbUH54E4KG8UzuuZaMc9KarHmpqQ=="
+    },
     "prelude-ls": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -9584,6 +9640,14 @@
         "tough-cookie": "~2.5.0",
         "tunnel-agent": "^0.6.0",
         "uuid": "^3.3.2"
+      },
+      "dependencies": {
+        "qs": {
+          "version": "6.5.2",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+          "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+          "dev": true
+        }
       }
     },
     "require-directory": {
@@ -11478,6 +11542,11 @@
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.3.tgz",
       "integrity": "sha512-BADg1mjGWX18Dpmy6bOGzGNnk7B/ZA0RxuA6qedY/YJwirMfKXIDzcccmHbQI0A6k5PzMdMloc0ElHfyOoX35A=="
     },
+    "vue-runtime-helpers": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vue-runtime-helpers/-/vue-runtime-helpers-1.1.2.tgz",
+      "integrity": "sha512-pZfGp+PW/IXEOyETE09xQHR1CKkR9HfHZdnMD/FVLUNI+HxYTa82evx5WrF6Kz4s82qtqHvMZ8MZpbk2zT2E1Q=="
+    },
     "vue-scrollbar-simple": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/vue-scrollbar-simple/-/vue-scrollbar-simple-0.0.6.tgz",
diff --git a/package.json b/package.json
index 786ce3c9469b14d2cde94f0f0fa3ce0709413454..c413fab57c89c8609dff1796ac356fcb0d9e0475 100644
--- a/package.json
+++ b/package.json
@@ -17,11 +17,13 @@
     "core-js": "^3.6.5",
     "dayjs": "^1.9.1",
     "file-saver": "^2.0.2",
+    "gridjs-vue": "^0.5.2",
     "jquery": "^3.5.1",
     "js-file-download": "^0.4.12",
     "kalendar-vue": "^2.1.1",
     "lodash.trim": "^4.5.1",
     "popper.js": "^1.16.1",
+    "qs": "^6.9.4",
     "vee-validate": "^2.2.15",
     "vue": "^2.6.11",
     "vue-axios-cors": "^1.0.1",
diff --git a/src/App.vue b/src/App.vue
index a46f5c3adba0e574373709077d06250f44c5f6dd..e7bc3d5a35dd2664e11ac0cace3259a7e6f84f43 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -20,24 +20,7 @@ export default {
     return{
       sidebarStyle: "",
       contentClass: "content col-md-10",
-      events: [
-        {
-          from: '2020-10-09T18:00:00Z',
-          to: '2020-10-09T19:00:00Z',
-          data: {
-            title: "Hello",
-            description: "Ola"
-          }
-        },
-        {
-          from: '2020-10-09T10:00:00Z',
-          to: '2020-10-09T15:00:00Z',
-          data: {
-            title: "Hello2",
-            description: "Ola"
-          }
-        }
-      ]
+      events: [],
     }
   },
 
@@ -61,31 +44,27 @@ export default {
       } else {
         this.sidebarStyle = "";
         this.contentClass = "content col-md-10";
-
-        this.$store.dispatch('event/get').then(
-            (data) => {
-              data.forEach(row => {
-                console.log("loop")
-                let title = row.title;
-                let description = row.description;
-                let from = '2020-10-11T10:00:00Z';
-                let to = '2020-10-11T19:00:00Z';
-
-                let payload = {
-                  from,
-                  to,
-                  data: {
-                    title,
-                    description
-                  }
-                }
-                this.events.push(payload);
-              })
-            }
-        )
-        console.log(this.events);
-        localStorage.setItem('events', JSON.stringify(this.events) );
+        this.loadData();
       }
+    },
+
+    loadData(){
+
+      this.$store.dispatch('event/get').then(
+          (data) => {
+            console.log("appdata"+data)
+            this.events = [];
+            data.forEach(row => {
+              let title = row.title;
+              let description = row.description;
+              let from = row.startTime;
+              let to = row.endTime;
+
+              this.events.push({id: row.id, from: from, to: to, data: { title: title, description: description}});
+              localStorage.setItem("events", JSON.stringify(this.events) );
+            })
+          }
+      )
     }
   }
 };
diff --git a/src/components/Calendar.vue b/src/components/Calendar.vue
index d0a150447d5e1127075c4eaea13034887ec3de19..fe8012949500ab794d9bebbe4ac5fe27336e9c90 100644
--- a/src/components/Calendar.vue
+++ b/src/components/Calendar.vue
@@ -1,5 +1,6 @@
 <template>
   <div class="content col-md-12">
+    {{events}}
     <kalendar :configuration="calendar_settings" :events.sync="events">
 
       <!-- CREATED CARD SLOT -->
@@ -30,8 +31,8 @@
       <!-- POPUP CARD SLOT -->
       <div slot="popup-form" slot-scope="{ popup_information }" style="display: flex; flex-direction: column;">
         <h4 style="margin-bottom: 10px">Neuen Event erstellen</h4>
-        <input v-model="new_appointment['title']" type="text" name="title" placeholder="Title">
-        <textarea v-model="new_appointment['description']" type="text" name="description" placeholder="Description" rows="2"></textarea>
+        <input v-model="new_appointment['title']" type="text" name="title" placeholder="Titel">
+        <textarea v-model="new_appointment['description']" type="text" name="description" placeholder="Beschreibung" rows="2"></textarea>
         <div class="buttons">
           <button class="cancel" @click="closePopups()">
             Cancel
@@ -59,8 +60,9 @@ export default {
   },
 
   data: () => ({
-    event: new Event('','','',''),
+    event: new Event('','','','',''),
     events: JSON.parse(localStorage.getItem("events")),
+
     formData: {
       from: null,
       to: null,
@@ -87,49 +89,31 @@ export default {
   }),
 
   created() {
-    this.addManually();
+    //this.loadData();
   },
 
   methods:{
 
     loadData(){
+
       this.$store.dispatch('event/get').then(
           (data) => {
-              data.forEach(row => {
-                console.log("loop")
-                let title = row.title;
-                let description = row.description;
-                let from = row.startTime;
-                let to = row.endTime;
-
-                let payload = {
-                  from,
-                  to,
-                  data: {
-                    title,
-                    description
-                  }
-                }
-                this.events.push(payload);
-              })
-            console.log(this.events);
+            console.log("data"+data)
+            localStorage.setItem("events", JSON.stringify([]) );
+            this.events = [];
+            data.forEach(row => {
+              let title = row.title;
+              let description = row.description;
+              let from = row.startTime;
+              let to = row.endTime;
+
+              this.events.push({id: row.id, from: from, to: to, data: { title: title, description: description}});
+              localStorage.setItem("events", JSON.stringify(this.events) );
+            })
           }
       )
     },
 
-    "addManually": function addManually() {
-      let title = 'New one';
-      let description = 'Lorem dsr';
-      let from = '2020-09-10T10:22:00+02:00';
-      let to = '2020-09-10T11:20:00+02:00';
-      let payload = {
-        data: { title, description },
-        from,
-        to,
-      };
-      this.$kalendar.addNewEvent(payload);
-    },
-
     // Create Event
     "addEvent": function addEvent(popup_data, form_data) {
 
@@ -151,6 +135,9 @@ export default {
       this.event.startTime = payload.from;
       this.event.endTime = payload.to;
 
+      this.events.push({from: payload.from, to: payload.to, data: { title: payload.data.title, description: payload.data.description}});
+      localStorage.setItem("events", JSON.stringify(this.events) );
+
       this.$store.dispatch('event/insert', this.event);
       this.$kalendar.closePopups();
       //this.clearFormData();
@@ -164,7 +151,10 @@ export default {
         key: kalendarEvent.key,
         id: kalendarEvent.kalendar_id,
       })
-    },
+      this.$store.dispatch('event/delete', kalendarEvent.kalendar_id);
+      setTimeout(() => this.loadData(), 500);
+    }
+
   }
 }
 </script>
diff --git a/src/components/Courses.vue b/src/components/Courses.vue
index 9da2ecd76a9d456b32263528bc9d9320db8a59c4..299839e14fdaa3a203a9ce16d5715e874051e822 100644
--- a/src/components/Courses.vue
+++ b/src/components/Courses.vue
@@ -1,9 +1,8 @@
 <template>
   <div class="card">
-    <div class="content col-md-12">
+    <div class="content col-md-12" style="display: block">
       <div id="search_box" class="search_box col-md-4">
         <div class="entry_box-inner">
-          {{checkedBoxes}}
           <a id="editbutton" class="button" href="./editcourse" style="visibility: hidden">Eintrag bearbeiten</a>
           <a id="addbutton" class="button" href="./createcourse">neuen Eintrag hinzufügen</a>
           <a id="deletebutton" class="button" @click="deleterows">ausgewählte Einträge löschen</a>
@@ -15,54 +14,58 @@
         </div>
       </div>
       <table id="Table">
-        <tr>
-          <th scope="row">
-            <div class="form-check">
-              <input name="checkbox" type="checkbox" class="form-check-input" id="checkbox_headerline" @click="checkAllBoxes">
-              <label class="form-check-label" for="checkbox_headerline"></label>
-            </div>
-          </th>
-          <th v-on:click="sortTable('imgsortcoursenumber')"><img id='imgsortcoursenumber' :src="require('../assets/'+sortImg)">Angebotsnummer</th>
-          <th v-on:click="sortTable('imgsortcourseoffer')"><img id="imgsortcourseoffer" :src="require('../assets/'+sortImg)">Angebot</th>
-          <th v-on:click="sortTable('imgsortcoursename')"><img id="imgsortcoursename" :src="require('../assets/'+sortImg)">Kursname</th>
-          <th v-on:click="sortTable('imgsorteventtype')"><img id="imgsorteventtype" :src="require('../assets/'+sortImg)">Veranstaltungsart</th>
-          <th v-on:click="sortTable('imgsortcoursedate')"><img id="imgsortcoursedate" :src="require('../assets/'+sortImg)">Kursdatum</th>
-          <th v-on:click="sortTable('imgsorttopic')"><img id="imgsorttopic" :src="require('../assets/'+sortImg)">Thema</th>
-          <th v-on:click="sortTable('imgsortcourselocation')"><img id="imgsortcourselocation" :src="require('../assets/'+sortImg)">Kursort</th>
-          <th v-on:click="sortTable('imgsortaccompanyingteacher')"><img id="imgsortaccompanyingteacher" :src="require('../assets/'+sortImg)">begleitende Lehrkraft</th>
-          <th v-on:click="sortTable('imgsortsupervisingstudents')"><img id="imgsortsupervisingstudents" :src="require('../assets/'+sortImg)">betreuende Studenten</th>
-          <th v-on:click="sortTable('imgsortpresentstudents')"><img id="imgsortpresentstudents" :src="require('../assets/'+sortImg)">Anzahl der Anwesenden</th>
-          <th v-on:click="sortTable('imgsortregisteredstudents')"><img id="imgsortregisteredstudents" :src="require('../assets/'+sortImg)">Anzahl der Angemeldeten</th>
-          <th v-on:click="sortTable('imgsortanzahlung')"><img id="imgsortanzahlung" :src="require('../assets/'+sortImg)">Anzahlung</th>
-          <th v-on:click="sortTable('imgsorthonorar')"><img id="imgsorthonorar" :src="require('../assets/'+sortImg)">Honorar</th>
-          <th v-on:click="sortTable('imgsortinstructor')"><img id="imgsortinstructor" :src="require('../assets/'+sortImg)">Kursleiter</th>
-          <th v-on:click="sortTable('imgsortstatus')"><img id="imgsortstatus" :src="require('../assets/'+sortImg)">Aktiv</th>
-          <th v-on:click="sortTable('imgsortnotefield')"><img id="imgsortnotefield" :src="require('../assets/'+sortImg)">Notiz</th>
-        </tr>
-        <tr v-for="row in filteredRows" :key="row.id">
-          <td scope="row">
-            <div class="form-check">
-              <input type="checkbox" class="form-check-input" name="checkbox_tablerow" id="checkbox_tablerow" v-model="checkedBoxes" :value="row.id">
-              <label class="form-check-label" for="checkbox_tablerow"></label>
-            </div>
-          </td>
-          <td>{{row.coursenumber}}</td>
-          <td style="padding-right:200px;">{{row.courseoffer}}</td>
-          <td style="padding-right:200px;">{{row.coursename}}</td>
-          <td>{{row.eventtype}}</td>
-          <td>{{row.coursedate}}</td>
-          <td>{{row.topic}}</td>
-          <td style="padding-right:200px;">{{row.courselocation}}</td>
-          <td>{{row.accompanyingteacher}}</td>
-          <td>{{row.supervisingstudents}}</td>
-          <td>{{row.presentstudents}}</td>
-          <td>{{row.registeredstudents}}</td>
-          <td>{{row.anzahlung}}</td>
-          <td>{{row.honorar}}</td>
-          <td>{{row.instructor}}</td>
-          <td>{{row.status}}</td>
-          <td style="padding-right:300px;">{{row.notefield}}</td>
-        </tr>
+        <thead>
+          <tr>
+            <th scope="row">
+              <div class="form-check">
+                <input name="checkbox" type="checkbox" class="form-check-input" id="checkbox_headerline" @click="checkAllBoxes">
+                <label class="form-check-label" for="checkbox_headerline"></label>
+              </div>
+            </th>
+            <th v-on:click="sortTable('imgsortcoursenumber')"><img id='imgsortcoursenumber' :src="require('../assets/'+sortImg)">Angebotsnummer</th>
+            <th v-on:click="sortTable('imgsortcourseoffer')"><img id="imgsortcourseoffer" :src="require('../assets/'+sortImg)">Angebot</th>
+            <th v-on:click="sortTable('imgsortcoursename')"><img id="imgsortcoursename" :src="require('../assets/'+sortImg)">Kursname</th>
+            <th v-on:click="sortTable('imgsorteventtype')"><img id="imgsorteventtype" :src="require('../assets/'+sortImg)">Veranstaltungsart</th>
+            <th v-on:click="sortTable('imgsortcoursedate')"><img id="imgsortcoursedate" :src="require('../assets/'+sortImg)">Kursdatum</th>
+            <th v-on:click="sortTable('imgsorttopic')"><img id="imgsorttopic" :src="require('../assets/'+sortImg)">Thema</th>
+            <th v-on:click="sortTable('imgsortcourselocation')"><img id="imgsortcourselocation" :src="require('../assets/'+sortImg)">Kursort</th>
+            <th v-on:click="sortTable('imgsortaccompanyingteacher')"><img id="imgsortaccompanyingteacher" :src="require('../assets/'+sortImg)">begleitende Lehrkraft</th>
+            <th v-on:click="sortTable('imgsortsupervisingstudents')"><img id="imgsortsupervisingstudents" :src="require('../assets/'+sortImg)">betreuende Studenten</th>
+            <th v-on:click="sortTable('imgsortpresentstudents')"><img id="imgsortpresentstudents" :src="require('../assets/'+sortImg)">Anzahl der Anwesenden</th>
+            <th v-on:click="sortTable('imgsortregisteredstudents')"><img id="imgsortregisteredstudents" :src="require('../assets/'+sortImg)">Anzahl der Angemeldeten</th>
+            <th v-on:click="sortTable('imgsortanzahlung')"><img id="imgsortanzahlung" :src="require('../assets/'+sortImg)">Anzahlung</th>
+            <th v-on:click="sortTable('imgsorthonorar')"><img id="imgsorthonorar" :src="require('../assets/'+sortImg)">Honorar</th>
+            <th v-on:click="sortTable('imgsortinstructor')"><img id="imgsortinstructor" :src="require('../assets/'+sortImg)">Kursleiter</th>
+            <th v-on:click="sortTable('imgsortstatus')"><img id="imgsortstatus" :src="require('../assets/'+sortImg)">Aktiv</th>
+            <th v-on:click="sortTable('imgsortnotefield')"><img id="imgsortnotefield" :src="require('../assets/'+sortImg)">Notiz</th>
+          </tr>
+        </thead>
+        <tbody>
+          <tr v-for="row in filteredRows" :key="row.id">
+            <td scope="row">
+              <div class="form-check">
+                <input type="checkbox" class="form-check-input" name="checkbox_tablerow" id="checkbox_tablerow" v-model="checkedBoxes" :value="row.id">
+                <label class="form-check-label" for="checkbox_tablerow"></label>
+              </div>
+            </td>
+            <td>{{row.coursenumber}}</td>
+            <td style="padding-right:200px;">{{row.courseoffer}}</td>
+            <td style="padding-right:200px;">{{row.coursename}}</td>
+            <td>{{row.eventtype}}</td>
+            <td>{{row.coursedate}}</td>
+            <td>{{row.topic}}</td>
+            <td style="padding-right:200px;">{{row.courselocation}}</td>
+            <td>{{row.accompanyingteacher}}</td>
+            <td>{{row.supervisingstudents}}</td>
+            <td>{{row.presentstudents}}</td>
+            <td>{{row.registeredstudents}}</td>
+            <td>{{row.anzahlung}}</td>
+            <td>{{row.honorar}}</td>
+            <td>{{row.instructor}}</td>
+            <td>{{row.status}}</td>
+            <td style="padding-right:300px;">{{row.notefield}}</td>
+          </tr>
+        </tbody>
       </table>
     </div>
   </div>
@@ -80,6 +83,7 @@ export default {
       currentSort:'imgsortcoursenumber',
       currentSortDir:'asc',
       sortImg: 'sort_def.svg',
+      events: JSON.parse(localStorage.getItem("events")),
     }
   },
 
@@ -259,9 +263,23 @@ export default {
   width: 100%;
   height: 100vh;
   overflow: auto;
+  scroll-behavior: unset;
   white-space: nowrap;
 }
 
+table {
+   text-align: left;
+   position: relative;
+   border-collapse: collapse;
+ }
+
+th {
+  background: white;
+  position: sticky;
+  top: 50px; /* Don't forget this, required for the stickiness */
+  box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.4);
+}
+
 .search_box{
   width: 100%;
   margin-top: 50px;
diff --git a/src/components/Layouts.vue b/src/components/Layouts.vue
index 39648c8297a93460d69a1f2413cbfa6c9a41533d..49cbdf698c200eab58e7a673db6917ed68857b80 100644
--- a/src/components/Layouts.vue
+++ b/src/components/Layouts.vue
@@ -1,15 +1,92 @@
 <template>
   <div id="content" class="content col-md-12">
-      Layouts
+    <grid
+        :auto-width="autoWidth"
+        :cols="cols"
+        :from="from"
+        :language="language"
+        :pagination="pagination"
+        :rows="rows"
+        :search="search"
+        :server="server"
+        :sort="sort"
+        :width="width"
+    ></grid>
   </div>
 </template>
 
 <script>
+import Grid from 'gridjs-vue'
+
 export default {
-  name: "Layouts"
+  name: "Layouts",
+  components: {
+    Grid
+  },
+
+  data(){
+    return {
+      cols: ['Make', 'Model', 'Year', 'Color', 'Color', 'Color', 'Color', 'Color', 'Color', 'Color'],
+      rows: [
+        ['Ford', 'Fusion', '2011', 'Silver'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+        ['Chevrolet', 'Cruz', '2018', 'White'],
+      ],
+      "autoWidth": true,
+      "from": undefined,
+      "language": undefined,
+      "pagination": true,
+      "search": true,
+      "server": undefined,
+      "sort": true,
+      "theme": "mermaid",
+      "width": "100%"
+    }
+  },
+
 }
 </script>
 
 <style scoped>
-
+.v-data-table /deep/ .sticky-header {
+  position: sticky;
+  top: 0;
+}
 </style>
\ No newline at end of file
diff --git a/src/models/event.js b/src/models/event.js
index aca80d1a53c8d64e17b5f39c756204ea6c160161..299d37e4b6608f3a74b5a7854c05e90369194f69 100644
--- a/src/models/event.js
+++ b/src/models/event.js
@@ -1,6 +1,7 @@
 export default class Event {
 
-    constructor(title, description, startTime, endTime) {
+    constructor(id, title, description, startTime, endTime) {
+        this.id = id;
         this.title = title;
         this.description = description;
         this.startTime = startTime;
diff --git a/src/services/event.service.js b/src/services/event.service.js
index bd79668d502c2484798e50034b90a8c6e37dc071..ebf6750e64440309b644a2f274075d6e1b5c271e 100644
--- a/src/services/event.service.js
+++ b/src/services/event.service.js
@@ -29,6 +29,16 @@ class EventService {
             });
     }
 
+    delete(id) {
+        return axios
+            .get(API_URL + 'deleteEvent/'+id, {
+                headers: authHeader()
+            })
+            .then(response => {
+                return response.data;
+            });
+    }
+
 }
 
 
diff --git a/src/store/event.module.js b/src/store/event.module.js
index 775225dd399769d935e644ef24edb4a423a32c10..785541ecd600e9477c36f43578659d272d7e5a8d 100644
--- a/src/store/event.module.js
+++ b/src/store/event.module.js
@@ -34,6 +34,20 @@ export const event = {
             );
         },
 
+
+        delete({ commit }, id) {
+            return EventService.delete(id).then(
+                response => {
+                    commit('insertSuccess', response);
+                    return Promise.resolve(response);
+                },
+                error => {
+                    commit('insertFailure');
+                    return Promise.reject(error);
+                }
+            );
+        },
+
     },
 
     mutations: {
diff --git a/src/store/teacher.module.js b/src/store/teacher.module.js
index fea7f1d83780bcc4f7659b7f9ef77ea1a43b7d05..24d890a940e4c3f5465095e59d26e5b6669aa634 100644
--- a/src/store/teacher.module.js
+++ b/src/store/teacher.module.js
@@ -1,5 +1,4 @@
 import TeacherService from '../services/teacher.service';
-import CourseService from "@/services/course.service";
 
 const initialState = null;