如果没有数据返回,我怎样才能完全隐藏jqgrid?

当我从我的webservice返回记录时,我有一段时间试图只显示我的jqGrid。 我不希望它被折叠到你只看到标题栏的地方,但如果那是我能做的最好的,我想我可以在标题中加入一条有意义的信息。 不过,我更愿意隐藏网格并显示“找不到记录”消息div块。

我也猜测,如果最坏的情况发生,我可以在这个问题上做解决方案如何在jqGrid中显示没有任何数据的信息? (链接包括作为其他人的替代可能解决方案)。

我已经尝试在从函数和GRIDCOMPLETE事件加载数据时使用的函数内部执行.hide(),并且都没有完成隐藏网格。 我是JQuery的新手,更不用说使用jqGrid了。

$(document).ready(function() { $("#list").jqGrid({ url: 'Service/JQGridTest.asmx/AssetSearchXml', datatype: 'xml', mtype: 'GET', colNames: ['Inv No', 'Date', 'Amount'], colModel: [ { name: 'invid', index: 'invid', width: 55 }, { name: 'invdate', index: 'invdate', width: 90 }, { name: 'amount', index: 'amount', width: 80, align: 'right' }], pager: jQuery('#pager'), postData: { "testvar": "whatever" }, rowNum: 10, rowList: [10, 20, 30], sortname: 'id', sortorder: "desc", viewrecords: true, imgpath: 'themes/sand/images', caption: 'My first grid', gridComplete: function() { var recs = $("#list").getGridParam("records"); if (recs == 0) { $("#list").hide(); } else { alert('records > 0'); } } }); ... 

并试过这个:

 $(document).ready(function() { $("#list").jqGrid({ datatype: function(postdata) { jQuery.ajax({ url: 'Service/JQGridTest.asmx/AssetSearchXml', data: postdata, dataType: "xml", complete: function(xmldata, stat) { if (stat == "success") { var thegrid = $("#list")[0]; thegrid.addXmlData(xmldata.responseXML); var recs = $("#list").getGridParam("records"); if (recs == 0) { $("#list").hide(); alert('No rows - grid hidden'); } else { alert(recs); } } else { alert('FAIL'); } } }); }, mtype: 'GET', colNames: ['Inv No', 'Date', 'Amount'], colModel: [ { name: 'invid', index: 'invid', width: 55 }, { name: 'invdate', index: 'invdate', width: 90 }, { name: 'amount', index: 'amount', width: 80, align: 'right' }], pager: jQuery('#pager'), postData: { "testvar": "whatever" }, rowNum: 10, rowList: [10, 20, 30], sortname: 'id', sortorder: "desc", viewrecords: true, imgpath: 'themes/sand/images', caption: 'My first grid' }); ... 

感谢您的任何帮助,您可以提供。

jqGrid用它的特殊酱汁和div包裹你的桌子,这样你就可以通过用你自己的div包装那个表来做你想做的事情你可以隐藏:

  

然后在你的gridComplete中:

  gridComplete: function() { var recs = parseInt($("#list").getGridParam("records"),10); if (isNaN(recs) || recs == 0) { $("#gridWrapper").hide(); } else { $('#gridWrapper').show(); alert('records > 0'); } } 

希望这可以帮助。

只是对seth解决方案的一点点扭曲:

  1. 你可以使用var recs = $(’#list’)。jqGrid(’getGridParam’,’ records ‘);

    var recs = $('#list').jqGrid('getGridParam','reccount');

    jqGrid网格选项’ records ‘默认值=’无’

    jqGrid网格选项’ reccount ‘默认为0,即使没有记录也会返回一个数字(返回0)

    请参阅wiki:options @ jqGrid Wiki

  2. 如果你不想使用包装div,你可以使用$('.ui-jqgrid').hide()$('.ui-jqgrid').show()来隐藏整个jqGrid。

    ui-jqgrid类仅用于jqGrid父类。

我发现这个:

 parseInt($("#grid").getGridParam("records"),10); 

正在回归“NaN”。 如果网格中没有记录,则“records”属性设置为null。 因此,您无法将其强制转换为数字,并检查它是否等于零。

  
<%: CommonText.NoRecords %>

JqG​​rid没有记录检查

 gridComplete: function () { var recs = $("#").getGridParam("records"); if (recs == 0 || recs == null) { $(tableContacts).setGridHeight(100); $("#NoRecordContact").show(); } } 

尝试使用此方法隐藏jqGrid:

 $("#someGridTableName").jqGrid("GridUnload"); 

一定要包括:
jquery.jqGrid-xxx / src / grid.custom.js文件。

请参阅此文章 ,其中详细介绍了上述方法。 或者在jqGrid wiki中 ,它在Add on Grid Methods部分中讨论了这个方法。

另一点需要考虑:
避免在jqGrid上使用包装器(见post )

标签来隐藏它,因为它是overflow: auto; 如果您尝试手动使网格列更宽并超过包装div的宽度,则属性将不起作用。
换句话说,jqGrid已经配备了逻辑来创建水平滚动条而无需外部div。

注意:在IE8和9上测试过

假设您有以下标记,您将在其中创建jqgrid:

 

现在在jqgrid代码的js脚本中,您可以将loadcomplete选项修改为:

 loadComplete: function () { if(jQuery("#jqgridtab").getDataIDs().length==0){ noDataError(); } } 

noDataError的定义将如下:

 function noDataError(){ document.getElementById("jqgridcontent").style.visibility="hidden"; document.getElementById("jqgridcontent").style.display="none"; } 

在网格定义中不包括“标题”选项就足够了。 使用5.0.1版测试

伙计们,不需要创建div或使用CSS。 它使用setGridState本机可用:

 gridComplete: function () { var recs = $('#myGrid').jqGrid('getGridParam', 'reccount'); if (isNaN(recs) || recs == 0) { $("#myGrid").jqGrid('setGridState', 'hidden'); } else { $("#myGrid").jqGrid('setGridState', 'visible'); } }