数据为空时的jqGrid错误

Posted

技术标签:

【中文标题】数据为空时的jqGrid错误【英文标题】:jqGrid error when data is null 【发布时间】:2015-07-06 23:24:08 【问题描述】:

我正在使用 jqGrid 来显示数据,其中一些字段在数据库中可能为空。出现空值时,我得到错误,对象引用未设置为对象的实例。

我已添加代码将 null 更改为字符串,如下所示,但 jqGrid 未显示:

<script type="text/javascript">
      $(document).ready(function () 
        $('#list').jqGrid(
            caption: "MM",
            url: '@Url.Action("GetAll", "Grid")',
            datatype: 'json',
            jsonReader: 
                root: "Rows",
                page: "Page",
                total: "Total",
                records: "Records",
                repeatitems: true,
                id: "Id",
                cell: "RowCells"
            ,
            mtype: 'POST',
            colNames: ['Serial'],
            colModel: [
                
                    name: 'Serial', index: 'Serial', align: 'center', width: 60, formatter: nullformatter
                
            ],
            pager: $('#pager'),
            rowNum: 10,
            rowList: [10, 20, 50, 100],
            sortname: 'Id',
            sortorder: 'desc',
            viewrecords: true,
            altRows: true,
            shrinkToFit: false,
            width: '1041',
            height: 'auto',
            hidegrid: false,
            direction: "rtl",
            gridview: true,
            rownumbers: true,
            footerrow: true,
            loadComplete: function () 
                $("tr.jqgrow:odd").css("background", "#E0E0E0");
            ,
            loadError: function (xhr, st, err) 
                jQuery("#rsperror").html("Type: " + st + "; Response: " + xhr.status + " " + xhr.statusText);
            
        )
          var nullformatter = function (cellvalue, options, rowobject) 
              alert('cell value==>>' + cellvalue);
              if (cellvalue == undefined || isnull(cellvalue) || cellvalue == 'NULL' || cellvalue.trim().length == 0) 
                  cellvalue = ' ';
              
              return cellvalue;
          ;
    )
</script>

【问题讨论】:

可能是isnull函数的使用?没有标准的 JavaScript 函数 isnull。你是否以某种方式定义了它?您应该尝试删除部分|| isnull(cellvalue) 或只是将主体替换为return cellvalue == null || cellvalue === "NULL" ? "" : cellvalue; 测试cellvalue == nullcellvalue === null || cellvalue === undefined 相同。 @Oleg 我用过但没用 @Oleg 我的函数不被格式化程序调用。 你介意nullformatter 永远不会被调用吗?可能您在错误的范围内定义了nullformatter?您是否在调试器中启动代码?您只需按 F12 启动开发人员工具,然后开始调试,出错时您将看到错误“对象引用未设置为对象实例”的确切位置。 你可以尝试使用匿名函数name: 'Version',..., formatter: function (cellvalue) return cellvalue == null || cellvalue === "NULL" ? "" : cellvalue; 【参考方案1】:

如果您使用var nullformatter = function (cellvalue, options, rowobject) ... 语法,那么您必须移动nullformatter 的定义 使用之前(在您使用$('#list').jqGrid(...); 创建网格之前)。您当前的代码使用formatter: undefined。只有你会使用function nullformatter (cellvalue, options, rowobject) ...,你才能定义下面的用法。

【讨论】:

@mahdisdezfouli:看看演示jsfiddle.net/OlegKi/u9x2fcz1/6,它使用了您的代码和一些测试数据。它正确加载数据。我看不出有什么问题。您应该将其与您的代码和从服务器返回的数据进行比较。 (演示使用 JSFiddle 回显服务,它允许模拟来自服务器的 JSON 响应) 对不起这个错误可能是 NULL 。因为在db中,有NULL。并且在演示中,当我更改(null 到 NULL)时,这不会显示。 @mahdisdezfouli:不客气!我建议您使用Fiddler 进行 HTTP 跟踪或至少使用 IE/Chrome/Firefox 的开发者工具(按 F12 开始)。如果您将看到服务器和 jqGrid 之间的完整通信,您肯定会解决问题,或者至少在我发布给您的演示 jsfiddle.net/OlegKi/u9x2fcz1/6 中包含服务器的 JSON。我个人非常频繁地使用 Fiddler。 @mahdisdezfouli:不客气!请在您找到原因或从重现问题的服务器收到 JSON 响应后通知您。 对不起。当我使用演示:jsfiddle.net/OlegKi/u9x2fcz1/6 并更改(null 为 NULL)它不起作用。当我使用资本时,它是错误的。为什么?请帮帮我。【参考方案2】:

您可以添加以下条件吗?它对我有用。

var nullformatter = function (cellvalue, options, rowobject) 
            if (cellvalue == undefined || isnull(cellvalue) || cellvalue == 'NULL' || cellvalue.trim().length==0)
             
              cellvalue = ' '; 
             
          return cellvalue;
        

如果上述条件不起作用,则提醒单元格值。

alert('cell value==>>'+cellvalue);

之后你会更正它。

或尝试遵循条件

if(null!=cellvalue && cellvalue.length>0)
   return cellvalue;
else
        return " ";
 

【讨论】:

我在哪里使用警报? 在 if 语句之前...假设它的显示对象...使用跟随警报(JSON.stringify(cellvalue)); alert('cell value==>>'+JSON.stringify(cellvalue)); 不显示警报。 alert('单元格值==>>'+JSON.stringify(cellvalue)); 我在 if 语句之前使用 alert 但不显示 alert

以上是关于数据为空时的jqGrid错误的主要内容,如果未能解决你的问题,请参考以下文章

解决用 VB 中用 ADO 访问 数据库时 SQL 查询处理 Null 值的问题( 使用 iff(isNull(字段), 为空时的值,不为空时的值) 来处理)

vue中当数据为空时的处理

显示“这是啥?” UITableViewController 为空时的消息

为啥延迟块为空时,Anylogic stopDelay() 函数会抛出错误?

仅当 Mono 为空时如何执行操作,如果不为空则抛出错误

最后一个值为空时的ByteBuffer翻转[重复]