我已经完成了大部分要求,但遇到了一个小问题。
我正在使用 jQuery 1.8.3 和 jqGrid 4.4.0。它有一个速率列,用作打开带有分解详细信息的模式框的链接。问题是 Rate 列中的值纯粹是数字,我使用自定义模板将格式设置为其值,但由于链接(自定义格式化程序),格式会消失。
HTML 代码:
<table id="tbCmpContents">
<tr><td/></tr>
</table>
<div id="divCmpContentsPager"></div>
JS代码:
var mydata = [
{Id: "2", Element: "Salt", Qty: "10.00", Rate: "21200.00", Cost: "200.00"},
{Id: "3", Element: "Sugar", Qty: "20.00", Rate: "32500.00", Cost: "600.00"}
],
viewNumTemplate = {
align: 'right',
classes: 'numberPadding',
formatter: 'number',
formatoptions: { decimalSeparator: ".", thousandsSeparator: "", decimalPlaces: 2, defaultValue: '0.00' },
sortable: false,
width: 100
},
getColumnIndexByName = function (grid, columnName) {
var cm = grid.jqGrid('getGridParam', 'colModel');
for (var i = 0, l = cm.length; i < l; i++) {
if (cm[i].name === columnName) {
return i; // return the index
}
}
return -1;
},
getTextFromCell = function (cellNode) {
var cellValue;
//check for all INPUT types
if (cellNode.childNodes[0].nodeName == "INPUT") {
//special case for handling checkbox
if (cellNode.childNodes[0].type == "checkbox") {
cellValue = cellNode.childNodes[0].checked.toString();
}
else {
//catch-all for all other inputs - text/integer/amount etc
cellValue = cellNode.childNodes[0].value;
}
}
//check for dropdown list
else if (cellNode.childNodes[0].nodeName == "SELECT") {
var newCell = $("select option:selected", cellNode);
cellValue = newCell[0].value;
}
else {
cellValue = cellNode.textContent || cellNode.innerText;
}
return cellValue;
},
calculateTotal = function (grid) {
var totalRate = 0.00;
i = getColumnIndexByName(grid, 'Rate');
$("tbody > tr.jqgrow > td:nth-child(" + (i + 1) + ")", grid[0]).each(function () {
totalRate += Number(getTextFromCell(this).replace(",", ""));
})
grid.jqGrid('footerData', 'set', { Rate: totalRate.toFixed(2) }, false );
};
function OpenInModal(id) {
//Open a modal window to render the break-up of rate for an element.
}
$(document).ready(function () {
var oGrid = $('#tbCmpContents');
oGrid.jqGrid({
data: mydata,
datatype: 'local',
colNames: ['Id', 'Element', 'Qty', 'Rate', 'Cost'],
colModel: [
{ name: 'Id', index: 'Id', hidden: true, key: true },
{ name: 'Element', index: 'Element', width: 120, sortable: true },
{ name: 'Qty', index: 'Qty', width: 100, formatter: 'number', align: 'right', sortable: false },
{ name: 'Rate', index: 'Rate', width: 100, template: viewNumTemplate,
formatter: function (cellvalue, options, rowObject) {
return '<a href="javascript:OpenInModal(\'' + rowObject[0] + '\')">' + cellvalue + '</a>';
}
},
{ name: 'Cost', index: 'Cost', width: 100, formatter: 'number', align: 'right', sortable: false }
],
autowidth: true,
height: 'auto',
rowNum: 10,
rowList: [10, 20, 30],
gridview: true,
autoencode: true,
ignoreCase: true,
sortname: 'Element',
sortorder: 'asc',
caption: 'Compound Contents',
editurl: 'clientArray',
footerrow: true,
loadonce: true,
gridComplete: function () {
calculateTotal($(this));
$("#tbCmpContents tr:last").addClass('ireg-jqgrid-lastrow');
$("tr.footrow td").addClass('ireg-jqgrid-lastrow').addClass('ireg-jqgrid-footer');
}
});
});
一种方法是我可以编写一个函数来格式化具有所需格式的数字(如千位分隔符、小数位等)并将其应用于自定义格式化程序函数中的 cellvalue 但我想知道 jqGrid 中是否有任何方法我可以达到同样的效果。
我请求所有 jqGrid 专家提出建议。谢谢大家。
示例代码:jsFiddle