问题 如何在jqGrid中显示没有任何数据的信息?


当jqGrid为空时,我想在网格内显示单个空行,并显示没有任何数据的信息消息。这怎么可能?谢谢


6898
2018-06-19 17:38


起源



答案:


我正在寻找这个问题的答案,并想出了以下解决方案,但我不是在和服务器说话,所以我必须使用'loadComplete'事件以外的东西。我迷上了'gridComplete'事件并检查是否有任何记录。如果没有,请显示空文本,否则将其隐藏。

jQuery的( '#测试')。jqGrid的({
        ... //一些设置
        gridComplete:loadCompleteFunction,
        emptyDataText:'没有记录。如果您想添加一个,请单击下面的“添加新...”按钮。',//您可以根据需要为此参数命名。
        ... // 更多设置

});

函数LoadComplete()
{
    if($('test')。getGridParam('records')== 0)//有记录吗?
        DisplayEmptyText(真);
    其他
        DisplayEmptyText(假);
}

函数DisplayEmptyText(显示)
{
    var grid = $('#test');
    var emptyText = grid.getGridParam('emptyDataText'); //获取空文本
    var container = grid.parents('。ui-jqgrid-view'); //找到网格的容器
    if(display){
        container.find('。ui-jqgrid-hdiv,.ui-jqgrid-bdiv')。hide(); //隐藏列标题和下面的单元格
        container.find('。ui-jqgrid-titlebar')。after(''+ emptyText +''); //插入空数据文本
    }
    其他{
        container.find('。ui-jqgrid-hdiv,.ui-jqgrid-bdiv')。show(); //显示列标题
        container.find('#EmptyData'+ dataObject).remove(); //删除空数据文本
    }
}


9
2017-10-07 21:42



+1这真的很有帮助。也有人可以参考 Oleg的这个演示 对于 我的问题。阅读评论部分以获取重要的内容 - abi1964


答案:


我正在寻找这个问题的答案,并想出了以下解决方案,但我不是在和服务器说话,所以我必须使用'loadComplete'事件以外的东西。我迷上了'gridComplete'事件并检查是否有任何记录。如果没有,请显示空文本,否则将其隐藏。

jQuery的( '#测试')。jqGrid的({
        ... //一些设置
        gridComplete:loadCompleteFunction,
        emptyDataText:'没有记录。如果您想添加一个,请单击下面的“添加新...”按钮。',//您可以根据需要为此参数命名。
        ... // 更多设置

});

函数LoadComplete()
{
    if($('test')。getGridParam('records')== 0)//有记录吗?
        DisplayEmptyText(真);
    其他
        DisplayEmptyText(假);
}

函数DisplayEmptyText(显示)
{
    var grid = $('#test');
    var emptyText = grid.getGridParam('emptyDataText'); //获取空文本
    var container = grid.parents('。ui-jqgrid-view'); //找到网格的容器
    if(display){
        container.find('。ui-jqgrid-hdiv,.ui-jqgrid-bdiv')。hide(); //隐藏列标题和下面的单元格
        container.find('。ui-jqgrid-titlebar')。after(''+ emptyText +''); //插入空数据文本
    }
    其他{
        container.find('。ui-jqgrid-hdiv,.ui-jqgrid-bdiv')。show(); //显示列标题
        container.find('#EmptyData'+ dataObject).remove(); //删除空数据文本
    }
}


9
2017-10-07 21:42



+1这真的很有帮助。也有人可以参考 Oleg的这个演示 对于 我的问题。阅读评论部分以获取重要的内容 - abi1964


棘手的一点是让消息显示在列中传播。我认为没有一种简单的方法可以做到这一点;你必须,比如说,隐藏除第一列之外的所有列,设置第一列的宽度以填充网格,并将消息放在第一列中。然后当你重新加载时,你必须撤消所有这些。它应该工作,但它有点混乱。

但是,假设您只想将消息放入第一列并将其余列留空。基本上,您实现“loadComplete”事件函数并操纵网格的内容。

像这样向网格对象添加属性:

//Various other grid properties...
loadComplete: function() {
     if (jQuery("#grid_id").getGridParam("records")==0) {
          jQuery("#grid_id").addRowData(
                "blankRow", {"firstCol":"No data was found". "secondCol":"", "thirdCol":""
          );
     }
}

其中“#grid_id”是网格容器的ID,“blankRow”是您为已添加的新行指定的任意ID,“firstCol”,“secondCol”等等是列的名称。


1
2018-06-19 18:53





  1. “行”:[] 对于json数组
  2. 成功附加错误容器

    onLoadSuccess: function() {
        **var rows = $(this).datagrid("getRows");**
    if(rows.length == 0)
    {
    
      $("#errordiv").show();
      $(".datagrid-view").append('<div class="errordiv" id="errordiv">Ur Message</div>');
    }
    else
     $("#errordiv").hide();
    
    
     }
    

1
2018-03-12 13:32





$('#grid').jqGrid({
     loadComplete: function() {
            if ($("#grid").getGridParam("records")==0) {
                $("#grid").addRowData(
                $("#grid")
                    .empty()
                    .append('<tr class="yourClass"><td>No records to display</td></tr>')
                 );
            }
        }
});

1
2017-09-14 09:26





将消息放在div中,样式为:hidden。将它放在您的寻呼机div中。

在loadComplete事件中执行以下操作:

if($('#results').getGridParam("records")==0) { 
 $("#noResultsDiv").show();   
}

0
2017-07-22 06:19





我按如下方式实现它(尽管这取决于我使用提供的寻呼机功能的事实)。没有记录返回时显示的所有内容都是标题栏和一个显示“没有要查看的记录”的寻呼机栏。

早期设置jqGrid默认选项的代码片段(在我的页面上甚至加载网格之前):

// jQuery jqGrid default options
$.extend($.jgrid.defaults, {
    pager: '#gridPager',
    emptyrecords: "No records to view", // Unnecessary (default in grid.locale-en.js)
    recordpos: 'left',
    recordtext: "Viewing {0} - {1} of {2}", // Overriding value in grid.locale-en.js
    viewrecords: true
});

加载jqGrid我的代码片段:

$('#grid').jqGrid({
    loadComplete: function () {
        // Hide column headers and top pager if no records were returned
        if ($('#grid').getGridParam('records') === 0) {
            $('#grid_toppager').hide();  // I used top & bottom pagers, so I hid one
            $('.ui-jqgrid-htable').hide();
        }
    }
});

编辑:你也可以参考这个答案 如果没有数据返回,我怎样才能完全隐藏jqgrid? 并做两件事之一:

1)将您的消息放在一个div中,将网格放在另一个div中。隐藏网格并显示消息。

2)将您的消息放在网格正下方的div中。按照我上面的方法,但隐藏所有寻呼机(不只是一个)。在同一事件处理程序中显示您的div。你应该看到的只是标题栏和你的消息div。


0
2017-08-16 22:54





我发现执行此操作的最佳方法是允许网格处理它是返回没有行的默认参数。例如,我正在使用JSON数据,因此这将是返回JSON。

{"d":"{"page":"1","total":"0","records":"0","rows":[]}"}

0
2018-01-13 03:59



试过这个,似乎没有任何结果。有隐藏的伎俩吗? - jayarjo


我知道这个问题有点旧,但对我来说这很好用:

$('#tableid').jqGrid({
  ...
  datatype: dataLoad,
  ...
})

function dataLoad(postdata, sid) {
  var id = sid.replace('load_', '');
  var result = loadDataFromServer('/my/server/url', postdata);

  if (result) {
    if (result.records > 0) {
      var thegrid = $("#"+id)[0];
      thegrid.addJSONData(result);
    }
    else
      $("#"+id+" tbody")
       .empty()
       .append('<tr><td class="emptyDataMsg">This table is empty</td></tr>');
  }
}

基本上我所做的是从服务器加载数据,检查我是否获得了一些记录,如果不是只清空表中的所有行,只添加一个宽度,只有一行带有我的自定义文本。使用一些CSS,结果非常简洁:

.emptyDataMsg {
  background-color: #EEEEEE;
  border-bottom: 1px solid #CCCCCC;
  color: #666666;
  font-size: 1.2em;
  font-weight: bold;
  padding: 5px;
  text-align: center;
}

0
2017-08-13 14:54