Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
33
rated 0 times [  38] [ 5]  / answers: 1 / hits: 18234  / 12 Years ago, mon, october 15, 2012, 12:00:00

How to write such functions and bind them to two buttons like add row and remove row:



The now working example code only support adding new row by editing on the blank bottom line.



<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>
<title>SlickGrid example 3: Editing</title>
<link rel=stylesheet href=../slick.grid.css type=text/css/>
<link rel=stylesheet href=../css/smoothness/jquery-ui-1.8.16.custom.css type=text/css/>
<link rel=stylesheet href=examples.css type=text/css/>
<style>
.cell-title {
font-weight: bold;
}

.cell-effort-driven {
text-align: center;
}
</style>
</head>
<body>
<div style=position:relative>
<div style=width:600px;>
<div id=myGrid style=width:100%;height:500px;></div>
</div>

<div class=options-panel>
<h2>Demonstrates:</h2>
<ul>
<li>adding basic keyboard navigation and editing</li>
<li>custom editors and validators</li>
<li>auto-edit settings</li>
</ul>

<h2>Options:</h2>
<button onclick=grid.setOptions({autoEdit:true})>Auto-edit ON</button>
&nbsp;
<button onclick=grid.setOptions({autoEdit:false})>Auto-edit OFF</button>
</div>
</div>

<script src=../lib/firebugx.js></script>

<script src=../lib/jquery-1.7.min.js></script>
<script src=../lib/jquery-ui-1.8.16.custom.min.js></script>
<script src=../lib/jquery.event.drag-2.0.min.js></script>

<script src=../slick.core.js></script>
<script src=../plugins/slick.cellrangedecorator.js></script>
<script src=../plugins/slick.cellrangeselector.js></script>
<script src=../plugins/slick.cellselectionmodel.js></script>
<script src=../slick.formatters.js></script>
<script src=../slick.editors.js></script>
<script src=../slick.grid.js></script>

<script>
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 grid;
var data = [];
var columns = [
{id: title, name: Title, field: title, width: 120, cssClass: cell-title, editor: Slick.Editors.Text, validator: requiredFieldValidator},
{id: desc, name: Description, field: description, width: 100, editor: Slick.Editors.LongText},
{id: duration, name: Duration, field: duration, editor: Slick.Editors.Text},
{id: %, name: % Complete, field: percentComplete, width: 80, resizable: false, formatter: Slick.Formatters.PercentCompleteBar, editor: Slick.Editors.PercentComplete},
{id: start, name: Start, field: start, minWidth: 60, editor: Slick.Editors.Date},
{id: finish, name: Finish, field: finish, minWidth: 60, editor: Slick.Editors.Date},
{id: effort-driven, name: Effort Driven, width: 80, minWidth: 20, maxWidth: 80, cssClass: cell-effort-driven, field: effortDriven, formatter: Slick.Formatters.Checkmark, editor: Slick.Editors.Checkbox}
];
var options = {
editable: true,
enableAddRow: true,
enableCellNavigation: true,
asyncEditorLoading: false,
autoEdit: false
};

$(function () {
for (var i = 0; i < 500; i++) {
var d = (data[i] = {});

d[title] = Task + i;
d[description] = This is a sample task description.n It can be multiline;
d[duration] = 5 days;
d[percentComplete] = Math.round(Math.random() * 100);
d[start] = 01/01/2009;
d[finish] = 01/05/2009;
d[effortDriven] = (i % 5 == 0);
}

grid = new Slick.Grid(#myGrid, data, columns, options);

grid.setSelectionModel(new Slick.CellSelectionModel());

grid.onAddNewRow.subscribe(function (e, args) {
var item = args.item;
grid.invalidateRow(data.length);
data.push(item);
grid.updateRowCount();
grid.render();
});
})
</script>
</body>
</html>

More From » jquery

 Answers
150

Eventually I figured it out myself. Please let me know if you have any better idea on how to do this.



$(#add_row).click(function() {
var dd = grid.getData();
dd.splice(dd.length,0,{title:});
grid.invalidateRow(data.length);
grid.updateRowCount();
grid.render();
grid.scrollRowIntoView(dd.length-1)
})

$(#remove_row).click(function() {
var dd = grid.getData();
var current_row = grid.getActiveCell().row;
dd.splice(current_row,1);
var r = current_row;
while (r<dd.length){
grid.invalidateRow(r);
r++;
}
grid.updateRowCount();
grid.render();
grid.scrollRowIntoView(current_row-1)
})

[#82552] Friday, October 12, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
amberlykaliac

Total Points: 415
Total Questions: 100
Total Answers: 85

Location: Wallis and Futuna
Member since Tue, Mar 30, 2021
3 Years ago
;