在我正在處理的jqgrid中,我將格式化程序應用於基於第一行數據的多個列。因此,如果第一行包含「PERCENT」的內容值,我將formtter應用於實際值列,將該值格式化爲帶小數位的數字。jqgrid:空數值列值顯示空白
我遇到的問題是,當列包含數值或null,格式化程序將空值格式化爲「0.00」。
我設置了以下jsFiddle來顯示發生了什麼。我需要的是,當json值爲空時,var1Value,var2Value和var3Value列顯示空白,而不是「0.00」。這可能嗎?
https://jsfiddle.net/msobczak/7prbs3tu/6/
的代碼如下:
的所有代碼var mainGrid = {
"total": 1,
"page": 1,
"pageSize": 20,
"records": 1,
"rows": [{
"id": 7259,
"var1Name": "2015 Median Age",
"var1Contents": "MEDIAN",
"var1IsString": 0,
"var1IsNumber": 1,
"var1Value": "44",
"var2Name": "% '15 HHs",
"var2Contents": "PERCENT",
"var2IsString": 0,
"var2IsNumber": 1,
"var2Value": "2.07",
"var3Name": "Wine At Home",
"var3Contents": "INDEX",
"var3IsString": 0,
"var3IsNumber": 1,
"var3Value": "135"
}, {
"id": 7259,
"var1Name": "2015 Median Age",
"var1Contents": "MEDIAN",
"var1IsString": 0,
"var1IsNumber": 1,
"var1Value": null,
"var2Name": "% '15 HHs",
"var2Contents": "PERCENT",
"var2IsString": 0,
"var2IsNumber": 1,
"var2Value": null,
"var3Name": "Wine At Home",
"var3Contents": "INDEX",
"var3IsString": 0,
"var3IsNumber": 1,
"var3Value": null
}]
};
GridFunctions = {
formatVariable: function(gridId, columnName, variableValue, variableContents, isNumber) {
if (variableValue != undefined && variableContents != undefined) {
switch (variableContents) {
case "MEDIAN":
$(gridId).jqGrid("setColProp", columnName, {
formatter: 'number',
defaultvalue: null
});
$(gridId).jqGrid("setColProp", columnName, {
formatoptions: {
thousandsSeparator: ',',
decimalPlaces: 0
}
});
break;
case "COUNT":
$(gridId).jqGrid("setColProp", columnName, {
formatter: 'number'
});
$(gridId).jqGrid("setColProp", columnName, {
formatoptions: {
thousandsSeparator: ',',
decimalPlaces: 0
}
});
break;
case "RATIO":
$(gridId).jqGrid("setColProp", columnName, {
formatter: 'number'
});
$(gridId).jqGrid("setColProp", columnName, {
formatoptions: {
thousandsSeparator: ',',
decimalPlaces: 0
}
});
break;
case "PERCENT":
$(gridId).jqGrid("setColProp", columnName, {
formatter: 'number',
defaultvalue: null
});
$(gridId).jqGrid("setColProp", columnName, {
formatoptions: {
thousandsSeparator: ',',
decimalPlaces: 2
}
});
break;
case "INDEX":
if (isNumber == 1) {
$(gridId).jqGrid("setColProp", columnName, {
formatter: 'number'
});
$(gridId).jqGrid("setColProp", columnName, {
formatoptions: {
thousandsSeparator: ',',
decimalPlaces: 0
}
});
}
break;
}
}
}
}
$(document).ready(function() {
$("#jqGrid").jqGrid({
datatype: function(postdata) {
$('#' + 'load_' + 'jqGrid').show();
var json = mainGrid;
var thisGridId = "#jqGrid";
var columnName = "var1Value";
var varName = json.rows[0].var1Name;
// Dynamically change column header for the variable 1 column
GridFunctions.formatVariable(thisGridId, columnName, json.rows[0].var1Value, json.rows[0].var1Contents, json.rows[0].var1IsNumber);
varName = json.rows[0].var2Name;
columnName = "var2Value";
// Dynamically change column header for the variable 2 column
GridFunctions.formatVariable(thisGridId, columnName, json.rows[0].var2Value, json.rows[0].var2Contents, json.rows[0].var2IsNumber);
varName = json.rows[0].var3Name;
columnName = "var3Value";
// Dynamically change column header for the variable 3 column
GridFunctions.formatVariable(thisGridId, columnName, json.rows[0].var3Value, json.rows[0].var3Contents, json.rows[0].var3IsNumber);
var thegrid = $('#jqGrid')[0];
thegrid.addJSONData(json);
$('#' + 'load_' + 'jqGrid').hide();
},
page: 1,
colModel: [{
label: 'ID',
name: 'id',
width: 50,
hidden: false,
key: true,
editable: true,
sortable: false,
editrules: {
edithidden: true
}
},
// Variable 1
{
label: 'var1Value',
name: 'var1Value',
width: 90,
sortable: true,
hidden: false,
align: 'right'
},
// Variable 2
{
label: 'var2Value',
name: 'var2Value',
width: 90,
sortable: true,
hidden: false,
align: 'right'
},
// Variable 3
{
label: 'var3Value',
name: 'var3Value',
width: 90,
sortable: true,
hidden: false,
align: 'right'
}
],
viewrecords: true,
width: 800,
shrinkToFit: false,
height: '100%',
rowNum: 20,
pager: "#jqGridPager"
});
});
嗨奧列格!首先,謝謝你幫助我使用defaultValue。該解決方案完美無缺!其次,我使用數據類型作爲函數,因爲我通過Salesforce內的異步服務調用獲取數據。長話短說,這種類型的調用不使用url,而是要求頁面使用帶有參數的Javascript函數對服務進行異步調用。是否有一個使用「json」數據類型的例子,其中通過JavaScript函數進行異步調用? –
@MichaelSobczak:這似乎是問題,這與您當前的問題無關。重要的一點是:您是否真的擁有大量數據,並且您需要**服務器端**分頁。 jqGrid對相對較大的一組數據非常有效。嘗試[示例](13)和4000行,頁面大小爲20的示例(http://www.ok-soft-gmbh.com/jqGrid/OK/performane-13-4000-20-free-jqgrid.htm)和[這一個](40000行)(http://www.ok-soft-gmbh.com/jqGrid/OK/performane-13-40000-20-free-jqgrid.htm)。如果你一次加載數據,然後使用'datatype:「local」',那麼所有的都很簡單。 – Oleg
@MichaelSobczak:我自己並沒有使用Salesforce,根本不知道它,但是我發現[文章](http://www.oyecode.com/2014/02/how-to-salesforce-rest- api-from-browser.html),它尋找我需要在Ajax請求中設置一些頭文件,然後可以使用標準的jQuery.ajax和jqGrid的標準'datatype:「json」'。在jqGrid中使用相同的代碼,您只需使用'loadBeforeSend'回調代替'beforeSend'。 – Oleg