24

当从我的网络服务返回记录时,我试图只显示我的 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');
            }
        }
    });

    ...

    <table id="list" class="scroll"></table> 
    <div id="pager" class="scroll" style="text-align:center;"></div> 

并尝试过这个:

$(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'
    });

    ...

    <table id="list" class="scroll"></table> 
    <div id="pager" class="scroll" style="text-align:center;"></div> 

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

4

10 回答 10

36

jqGrid 用它的特殊酱汁和 div 包裹你的桌子,所以你应该能够通过用你自己的 div 包裹桌子来做你想做的事,你可以隐藏:

 <div id="gridWrapper">
    <table id="list" class="scroll"></table> 
 </div>

然后在你的gridComplete中:

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

希望这可以帮助。

于 2009-07-22T20:06:23.097 回答
6

只是对赛斯的解决方案有点扭曲:

  1. 您可以使用 var recs = $('#list').jqGrid('getGridParam',' records ');

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

    jqGrid网格选项'记录'默认值='无'

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

    wiki:options @ jqGrid Wiki

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

    ui-jqgrid 类仅用于 jqGrid 父级。

于 2010-10-28T15:18:40.323 回答
5

我发现这是:

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

正在返回一个“NaN”。如果网格中没有记录,则“records”属性设置为 null。所以你不能把它转换成一个数字并检查它是否等于零。

于 2009-10-22T01:29:24.133 回答
1
<!-- table for Pagination START -->
<table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td>
            <div id="pager" class="scroll" style="text-align: right;" />
        </td>
    </tr>
</table> 
<!-- table for Pagination END -->
<table id="tblCompany" class="scroll" width="100%" cellpadding="0" cellspacing="0">
</table>
<div id="NoRecord" class="NoRecord">
    <%: CommonText.NoRecords %>
</div>

JqG​​rid 无记录检查

gridComplete: function () {
    var recs = $("#").getGridParam("records");
    if (recs == 0 || recs == null) {
        $(tableContacts).setGridHeight(100);
        $("#NoRecordContact").show();
    }
}
于 2010-09-08T07:04:03.747 回答
1

尝试使用此方法隐藏 jqGrid:

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

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

请参阅这篇文章,其中更多地讨论了上述方法。或jqGrid wikiAdd on Grid Methods ,它在该部分中讨论了此方法。

要考虑的另一点:避免在 jqGrid 上
使用包装器(参见帖子overflow: auto;) <div> 标记来隐藏它,因为如果您尝试手动使网格列更宽并超过包装器 div 的宽度,它的属性将不起作用。
换句话说,jqGrid 已经配备了无需外部 div 帮助即可创建水平滚动条的逻辑。

注意:在 IE8 和 9 上测试

于 2013-03-12T22:52:05.287 回答
0

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

<div id=jqgridcontent>
<table id="jqgridtab"></table>
</div>

现在在 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"; 
}
于 2014-06-05T06:24:58.127 回答
0

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

于 2016-10-27T19:48:17.673 回答
0

伙计们,无需创建 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');
    }
  }
于 2017-04-05T14:40:07.043 回答
0
Try this (Keep JqGrid inside a div). Also create a label to display a meesage.
                        <label style="font-weight:bold;color:red;font-size:11px;" id="lblValMessage"></label>

  <div align="center" class='content' id="divForImageResult">
                                <div style="padding-left:50px;">
                                </div>
                                <table id="EmpTable"></table>
                                <div id="EmpPager">
                                </div>
                            </div>
And then write this after ajax call
   gridComplete: function () {
                                var recs = parseInt($("#EmpTable").getGridParam("records"), 10);
                                if (isNaN(recs) || recs == 0) {
                                    document.getElementById("lblValMessage").innerHTML = "No data found.";

                                    $("#divForImageResult").hide();

                                }
                                else {
                                    $('#divForImageResult').show();

                                }
                            }

                        });
于 2019-03-14T11:35:10.613 回答
0

只需为 jqgrid 元素设置 opacity:0 即可。它也会起作用。

于 2019-03-19T05:16:47.920 回答