Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery jqgrid:为空数值列值显示空白_Jquery_Jqgrid - Fatal编程技术网

Jquery jqgrid:为空数值列值显示空白

Jquery jqgrid:为空数值列值显示空白,jquery,jqgrid,Jquery,Jqgrid,在我正在处理的jqgrid中,我基于第一行中的数据将格式化程序应用于多个列。因此,如果第一行包含“百分比”的内容值,我将对实际值列应用formtter,该列将值格式化为带小数点的数字 我遇到的问题是,当列包含数值或null时,格式化程序将null值格式化为“0.00” 我设置了下面的jsFiddle来显示发生了什么。我需要的是,当json值为null时,var1Value、var2Value和var3Value列显示空白,而不是“0.00”。这可能吗 守则如下: var mainGrid =

在我正在处理的jqgrid中,我基于第一行中的数据将格式化程序应用于多个列。因此,如果第一行包含“百分比”的内容值,我将对实际值列应用formtter,该列将值格式化为带小数点的数字

我遇到的问题是,当列包含数值或null时,格式化程序将null值格式化为“0.00”

我设置了下面的jsFiddle来显示发生了什么。我需要的是,当json值为null时,var1Value、var2Value和var3Value列显示空白,而不是“0.00”。这可能吗

守则如下:

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"
  });
});

首先,你的代码很难阅读。如果我正确理解了您的问题,那么您只需使用格式化程序:“number”并设置默认值

您可以使用当前代码

$(gridId).jqGrid(“setColProp”,columnName{
格式化程序:“数字”,
defaultvalue:null
});
$(gridId).jqGrid(“setColProp”,columnName{
格式选项:{
千分位:',',
小数位数:0
}
});
这和

$(gridId).jqGrid(“setColProp”,columnName{
格式化程序:“数字”,
defaultvalue:null,
格式选项:{
千分位:',',
小数位数:0
}
});
代码包含一些错误。您需要的属性的正确名称是
defaultValue
,而不是
defaultValue
,并且需要在
formatoptions
中设置该属性。如果需要显示空单元格,则可以使用
defaultValue:“
或更好的
defaultValue: ;”

$(gridId).jqGrid(“setColProp”,columnName{
格式化程序:“数字”,
格式选项:{
千分位:',',
小数位数:0,
默认值: 
}
});

此外,我不建议您使用
datatype
作为函数。您将禁用jqGrid的许多有用功能,但没有任何优势。在我看来,您的实际代码从服务器加载数据,并且希望根据服务器响应中的数据更改列属性。您可以在本例中使用
datatype:“json”
,并在jqGrid处理数据之前使用
beforeProcessing
回调对数据进行“预处理”。有关更多详细信息,请参阅。

Hi-Oleg!首先,感谢您帮助我了解defaultValue。这个解决方案非常有效!其次,我使用数据类型作为函数,因为我通过Salesforce内部的异步服务调用获取数据。长话短说,这种类型的调用不使用url,而是要求页面使用带有参数的Javascript函数对服务进行异步调用。是否有一个使用“json”数据类型的例子,其中通过JavaScript函数进行异步调用?@MichaelSobczak:这似乎是问题所在,与您当前的问题无关。重要的一点是:您是否真的拥有大量数据,是否需要服务器端分页。jqGrid对于相对较大的数据集非常有效。尝试使用13列4000行,页面大小为20,行数为40000。如果您要立即加载数据,然后使用
数据类型:“local”
,一切都会很简单。@MichaelSobczak:我自己不使用Salesforce,也不知道它,但我发现在我看来,只需在Ajax请求中设置一些头,然后就可以使用标准jQuery.Ajax,因此标准
数据类型:“json”jqGrid的
。在jqGrid中使用相同的代码您只需要使用
loadBeforeSend
回调,而不是
beforeSend
。在您找到的文章中,程序员实际上是在对Salesforce本身进行REST查询。我正在查询Salesforce外部的REST服务,使用Salesforce REST服务作为代理。外部REST服务正在使用分页。在我工作的地方,我们有由PL/SQL代码生成的非常大的数据集,我们不希望用户等待很长时间,等待外部服务生成40000行并将其发送回页面。我们需要做的事是不切实际的。因此,我们在服务器端进行分页。更新的JSFIDLE,以防任何人希望看到更新的工作版本: