SlickGrid Dirty detection
Detects the dirty row, conditionally cell formatting
by Anil D
HTML
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/themes/redmond/jquery-ui.css">
<script src="https://rawgithub.com/Celebio/SlickGrid/master/lib/jquery.event.drag-2.2.js"></script>
<script src="https://rawgithub.com/Celebio/SlickGrid/master/slick.core.js"></script>
<script src="https://rawgithub.com/Celebio/SlickGrid/master/slick.grid.js"></script>
<link rel="stylesheet" href="https://rawgithub.com/Celebio/SlickGrid/master/slick.grid.css">
<link rel="stylesheet" href="https://rawgithub.com/Celebio/SlickGrid/master/slick-default-theme.css">
<script src="http://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<script src="https://rawgithub.com/Celebio/SlickGrid/master/slick.formatters.js"></script>
<script src="https://rawgithub.com/Celebio/SlickGrid/master/slick.editors.js"></script>
<script src="https://rawgithub.com/Celebio/SlickGrid/master/plugins/slick.cellselectionmodel.js"></script>
<script src="https://rawgithub.com/Celebio/SlickGrid/master/plugins/slick.cellrangedecorator.js"></script>
<script src="https://rawgithub.com/Celebio/SlickGrid/master/plugins/slick.cellrangeselector.js"></script>
<div id="myGrid" style="width:auto;height:200px;"></div>
<button type="button" id="save">Save</button>
<div id="result"></div>
CSS
/*style the main menu*/
.myMenu {
margin:0;
padding:0;
}
.myMenu li {
list-style:none;
float:left;
font:12px Arial, Helvetica, sans-serif #111;
}
.myMenu li a:link, .myMenu li a:visited {
display:block;
text-decoration:none;
background-color:#09F;
padding: 0.5em 2em;
margin:0;
border-right: 1px solid #fff;
color:#111;
}
.myMenu li a:hover {
background-color:#0CF;
}
/*style the sub menu*/
.myMenu li ul {
position:absolute;
visibility:hidden;
border-top:1px solid #fff;
margin:0;
padding:0;
}
.myMenu li ul li {
display:inline;
float:none;
}
.myMenu li ul li a:link, .myMenu li ul li a:visited {
background-color:#09F;
width:auto;
}
.myMenu li ul li a:hover {
background-color:#0CF;
}
.red{
background: red !important;
}
.green{
background: green !important;
}
input.editor-text{
background: transparent !important;
border: transparent !important;
}
.customSelected {
z-index: 10;
background: #DFE8F6 !important;
}
.ng-invalid {
border: 1px solid red;
}
body {
font-family: Arial, Helvetica, sans-serif;
}
body,td,th {
font-size: 14px;
margin: 0;
}
table {
border-collapse: separate;
border-spacing: 2px;
display: table;
margin-bottom: 0;
margin-top: 0;
-moz-box-sizing: border-box;
text-indent: 0;
}
a:link,a:visited,a:hover {
color: #5D6DB6;
text-decoration: none;
}
.error {
color: red;
}
.ui-helper-hidden {
display: none;
}
JavaScript
function requiredFieldValidator(value) {
if (value == null || value == undefined || !value.length) {
return {valid: false, msg: "This is a required field"};
} else {
return {valid: true, msg: null};
}
}
var selectedColNum, selectedRowNum;
var grid;
var data = [];
var columns = [
{id: "title", name: "Title", field: "title", editor: Slick.Editors.Text},
{id: "duration", name: "Duration", field: "duration", formatter: function ( row, cell, value, columnDef, dataContext ) {
if(value === '5 days'){
//return '<div style="width:100%; padding:0; margin:0" class ="red">' + value + '</div>';
//return '<ul class="myMenu"><li><a href="#">menu item 1</a></li><li><a href="#">menu item 4</a></li><li><a href="#">menu item 5</a></li></ul>';
return '<select><option value="volvo">Volvo</option><option value="saab">Saab</option><option value="mercedes">Mercedes</option><option value="audi">Audi</option></select>';
}
//return '<div style="width:100%; padding:0; margin:0" class ="green">' + value + '</div>';
return '<INPUT type=text class="editor-text" />';
}},
{id: "%", name: "% Complete", field: "percentComplete", editor: Slick.Editors.Text},
{id: "start", name: "Start", field: "start", editor: Slick.Editors.Text},
{id: "finish", name: "Finish", field: "finish", editor: Slick.Editors.Text},
{id: "effort-driven", name: "Effort Driven", field: "effortDriven", editor: Slick.Editors.Text}
];
function queueAndExecuteCommand(item, column, editCommand) {
item['_update']=true;//like this conditionally check for add, delete
modRecords.push(item);
editCommand.execute();
};
var options = {
enableCellNavigation: true,
enableColumnReorder: true,
editable:true,
editCommandHandler:...