У меня есть следующий jqGrid. Столбец 'ActiveStatusText'
заполняется значением столбца IsActive
, равным rowObject
, с использованием средства форматирования.
{
name: 'ActiveStatusText',
width: 100,
formatter: function (cellvalue, options, rowObject) {
return rowObject.IsActive == true ? 'Active' : 'Retired';
}
}
При нажатии кнопки текст отображения состояния («ActiveStatusText») необходимо обновить.
- Когда нажатие кнопки «Снять с учета» завершено, отображение состояния должно стать «Снято с учета», а текст кнопки должен быть «Активировать». Это прекрасно работает.
- Когда нажатие кнопки «Активировать» завершено, отображение состояния должно стать «Активно», а текст кнопки должен быть «Снять с учета». Столбец состояния не обновляется.
Почему изменение текста происходит только в первый раз? Как это исправить?
$(document).ready(function () {
function updateActiveStatus(rowid, isToActive) {
alert(isToActive);
$("#list").jqGrid('setCell', rowid, 'IsActive', isToActive);
$("#list").jqGrid('getLocalRow', rowid).IsActive = isToActive;
//Set display text
$("#list").jqGrid('setCell', rowid, 'ActiveStatusText', isToActive);
}
var myData = [
{ "id": "35", "firstname": null, "codeval": "G", "note": "xx7866", "amount": "23", "IsActive": true },
{ "id": "73", "firstname": null, "codeval": "W", "note": "dd1047", "amount": "34", "IsActive": true },
{ "id": "75", "firstname": "LORA", "codeval": "H", "note": "rr7323", "amount": "56", "IsActive": true },
{ "id": "95", "firstname": "EST", "codeval": "M", "note": "gg574", "amount": "55", "IsActive": false }
],
myGrid = $("#list");
myGrid.jqGrid({
datatype:'local',
data: myData,
colNames: ['ID', 'Note','Status', 'Action'],
colModel:[
{name:'id',width:70,align:'center',sorttype: 'int'},
{name:'note',index:'note',width:100,sortable:false},
{
name: 'ActiveStatusText',
width: 100,
formatter: function (cellvalue, options, rowObject) {
return rowObject.IsActive == true ? 'Active' : 'Retired';
}
},
{
name: 'IsActive',
width: 100,
formatter: function (cellvalue, options, rowObject) {
if (cellvalue == true) {
return '<div><button class="ui-button ui-widget ui-state-default app-custom-button-retire" >' +
'Retire' +'</button></div>';
}
else {
return '<div><button class="ui-button ui-widget ui-state-default app-custom-button-activate" >' +
'Activate' +
'</button></div>';
}
}
}
],
rowNum:10,
pager: '#pager',
gridview:true,
ignoreCase:true,
rownumbers:true,
viewrecords: true,
sortorder: 'desc',
height: '100%',
beforeSelectRow: function (rowid, e) {
var $self = $(this),
$td = $(e.target).closest("tr.jqgrow>td"),
rowid = $td.parent().attr("id"),
rowData = $self.jqGrid("getRowData", rowid),
iCol = $td.length > 0 ? $td[0].cellIndex : -1,
colModel = $self.jqGrid("getGridParam", "colModel");
celValue = $self.jqGrid('getCell', rowid, 'FirstName');
if (iCol >= 0 && colModel[iCol].name === "IsActive") {
if ($(e.target).hasClass("app-custom-button-retire")) {
updateActiveStatus(rowid,false);
return false;
}
if ($(e.target).hasClass("app-custom-button-activate")) {
updateActiveStatus(rowid, true);
return false;
}
}
//Avoid selection of row
return false;
}
});
});
HTML
<body>
<table id="list"><tr><td/></tr></table>
<div id="pager"></div>
</body>
free-jqgrid.d.ts
, который вы найдете здесь, который можно использовать в TypeScript и в котором будут описаны все методы, события и опции бесплатного jqGrid. 09.02.2017grid.locale-en.js
не требуется, если вы используете английский язык США. Вам нужно включить толькоhttps://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.13.6/css/ui.jqgrid.min.css
иhttps://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.13.6/js/jquery.jqgrid.min.js
. 09.02.2017https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.13.6/js??/jquery.jqgrid.min.j??s
во второй демонстрации. Исправленная демонстрация с тем же кодом — jsfiddle.net/OlegKi/zyf9n784/4. Тот же код мог быть немного короче в случае использования бесплатного jqGrid: jsfiddle.net/OlegKi/zyf9n784/ 6а> 10.02.2017