it-swarm.dev

Jak mogę całkowicie ukryć jqgrid, gdy nie wróciły żadne dane?

Mam trochę czasu próbując wyświetlać tylko moją tablicę jqGrid, gdy rekordy są zwracane z mojej usługi internetowej. Nie chcę, aby był zwinięty do miejsca, w którym widoczny jest tylko pasek napisów, ale jeśli to jest najlepsze, co mogę zrobić, przypuszczam, że mógłbym umieścić znaczący komunikat w podpisie. Mimo to wolałbym ukryć siatkę i wyświetlić blok div wiadomości „Nie znaleziono rekordów”.

Zgaduję również, że jeśli najgorsze przyszło do najgorszego, mógłbym rozwiązać to pytanie Jak wyświetlić informacje w jqGrid, że nie ma żadnych danych? (link dołączony jako alternatywne możliwe rozwiązanie dla innych).

Próbowałem wykonać .hide () wewnątrz zarówno funkcji używanej podczas ładowania danych z funkcji i zdarzenia GRIDCOMPLETE, jak i nie udało się ukryć siatki. Jestem całkiem nowy w JQuery, nie wspominając już o całkiem nowym użyciu 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> 

I spróbowałem tego też:

$(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> 

Dziękujemy za wszelką pomoc, jaką możesz zapewnić.

23
Billyhole

jqGrid opakowuje twoją tabelę specjalnym sosem i div, więc powinieneś być w stanie zrobić to, co chcesz, zawijając tę ​​tabelę swoim własnym divem, który możesz ukryć:

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

Następnie w twojej gridComplete:

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

Mam nadzieję że to pomoże.

36
seth

tylko mały zwrot w seth's rozwiązanie:

  1. możesz użyć zamiast var recs = $ ('# list'). jqGrid ('getGridParam', 'records');

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

    opcja siatki jqGrid 'rekordywartość domyślna _' = 'Brak'

    opcja siatki jqGrid ' reccount ' domyślnie 0 i zawsze zwraca liczbę, nawet jeśli nie ma żadnych rekordów (zwraca 0)

    zobacz wiki: options @ jqGrid Wiki

  2. Jeśli nie chcesz używać zawijającego div, możesz ukryć całą jqGrid używając funkcji $('.ui-jqgrid').hide() lub $('.ui-jqgrid').show().

    Klasa ui-jqgrid jest używana tylko dla rodzica jqGrid.

6
woodchucky

Stwierdzam, że to:

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

zwraca „NaN”. Właściwość „records” jest ustawiona na null, jeśli w siatce nie ma żadnych rekordów. Więc nie możesz rzucić go na numer i sprawdzić, czy jest równy zero.

5
Max
<!-- 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>

JqGrid No Records Check

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

Spróbuj użyć tej metody, aby ukryć jqGrid:

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

Pamiętaj, aby dołączyć:
Plik jquery.jqGrid-x.x.x/src/grid.custom.js.

Zobacz ten post , który mówi więcej o powyższej metodzie. Lub jqGrid wiki , gdzie mówi o tej metodzie w sekcji Add on Grid Methods.

Kolejna kwestia do rozważenia:
Unikaj używania tagów otoki (patrz post ) <div> na jqGrid, aby go ukryć, ponieważ jego atrybut overflow: auto; nie będzie działał, jeśli spróbujesz utworzyć siatkę kolumny ręcznie szersze i przekraczają szerokość div otoki.
Innymi słowami, jqGrid jest już wyposażony w logikę do tworzenia poziomego paska przewijania bez pomocy zewnętrznych div.

Uwaga: Testowane na IE8 i 9

1
Roman M

Załóżmy, że masz poniżej tag, w którym będziesz tworzyć jqgrid:

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

Teraz w skrypcie js w kodzie jqgrid możesz zmodyfikować opcję loadcomplete jako:

loadComplete: function () {

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

Definiowanie noDataError będzie takie jak:

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

Wystarczy ustawić krycie: 0 dla elementu jqgrid. to też zadziała.

0

Ludzie, nie ma potrzeby tworzenia divów ani używania CSS. Jest natywnie dostępny za pomocą setGridState :

gridComplete: function ()
  {
    var recs = $('#myGrid').jqGrid('getGridParam', 'reccount');

    if (isNaN(recs) || recs == 0)
    {
      $("#myGrid").jqGrid('setGridState', 'hidden');
    }
    else
    {
      $("#myGrid").jqGrid('setGridState', 'visible');
    }
  }
0
Robert Smith
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();

                                }
                            }

                        });
0
MS Wani

Wystarczy nie dodawać opcji „podpis” do definicji siatki. Przetestowano w wersji 5.0.1

0
user7082304