I have figured it out. In case anyone else wants the code:
Column description:
{ id: "chk", name: "", field: "id", formatter: fmtChecker, cssClass:
"aligncenter", width: 50, resizable: false, unselectable: false,
sortable: false },
Formatter function:
var fmtChecker = function (row, cell, value, columnDef, dataContext) {
if (value == "") {
return "<i>ERROR!</i>"
} else {
var isSelected = false
for (var i = 0; i < selectedRowIds.length; i++) {
if (selectedRowIds[i] == value) { isSelected = true;
break; }
}
// recheck the checkbox on redraw of cell after scroll if
prev. selected
if (isSelected == false) {
return "<input type='checkbox' onClick='SelectRow(" +
value + ");' value='" + value + "' />"
} else {
return "<input type='checkbox' checked='true'
onClick='SelectRow(" + value + ");' value='" + value + "' />"
}
}
};
SelectRow function:
function SelectRow(val) {
var isSelected = false;
for (var i = 0; i < selectedRowIds.length; i++) {
if (selectedRowIds[i] == val) {
// remove row; unchecked
selectedRowIds.splice(i, 1);
isSelected = true;
break;
}
}
if (isSelected == false) {
selectedRowIds.push(val);
}
var rows = [];
if (selectedRowIds.length > 0) {
for (var i = 0; i < selectedRowIds.length; i++) {
var idx = dataView.getRowById(selectedRowIds[i]);
if (idx != undefined) {
rows.push(idx);
}
}
}
//reselect appropiate grid rows
grid.setSelectedRows(rows);
}