jquery jqgrid中的滚动条未填充数据

iq3niunx  于 2023-01-20  发布在  jQuery
关注(0)|答案(5)|浏览(122)

我尝试使用jqgrid创建一个网格,该网格最初没有数据,但具有固定大小,其中列的总宽度大于网格宽度,因此用户只能滚动标题。用户将单击一个按钮,该按钮将数据填充到网格中。这听起来可能类似于已经回答的问题jqGrid vertical scrollbar
然而,在这种情况下,数据已经存在了。我最初没有数据,希望网格具有滚动条。我注意到,只有填充数据后,才会创建class为. ui-jqgrid-bdiv的div。
这是jqgrid中的一个bug吗?有什么解决方法吗?
这是小提琴http://jsfiddle.net/yNw3C/2630/
下面是代码:
javascript语言

$(document).ready(function () {
    $("#results").jqGrid({
        datatype: "local",
        height: 150,
        scroll:true,
        width:300,
        shrinkToFit:false,
        colNames: ['Inv No', 'Date', 'Client', 'Amount', 'Tax', 'Total', 'Notes'],
        colModel: [
            { name: 'id', index: 'id', width: 160, sorttype: "int" },
            { name: 'invdate', index: 'invdate', width: 90, sorttype: "date" },
            { name: 'name', index: 'name', width: 100 },
            { name: 'amount', index: 'amount', width: 80, align: "right", sorttype: "float" },
            { name: 'tax', index: 'tax', width: 180, align: "right", sorttype: "float" },
            { name: 'total', index: 'total', width: 280, align: "right", sorttype: "float" },
            { name: 'note', index: 'note', width: 150, sortable: false }
           ],
       });
            var mydata = [
                            { id: "1", invdate: "2007-10-01", name: "test", note: "note", amount: "200.00", tax: "10.00", total: "210.00" },
                            { id: "2", invdate: "2007-10-02", name: "test2", note: "note2", amount: "300.00", tax: "20.00", total: "320.00" },
                            { id: "3", invdate: "2007-09-01", name: "test3", note: "note3", amount: "400.00", tax: "30.00", total: "430.00" },
                            { id: "4", invdate: "2007-10-04", name: "test", note: "note", amount: "200.00", tax: "10.00", total: "210.00" },
                            { id: "5", invdate: "2007-10-05", name: "test2", note: "note2", amount: "300.00", tax: "20.00", total: "320.00" },
                            { id: "6", invdate: "2007-09-06", name: "test3", note: "note3", amount: "400.00", tax: "30.00", total: "430.00" },
                            { id: "7", invdate: "2007-10-04", name: "test", note: "note", amount: "200.00", tax: "10.00", total: "210.00" },
                            { id: "8", invdate: "2007-10-03", name: "test2", note: "note2", amount: "300.00", tax: "20.00", total: "320.00" },
                            { id: "9", invdate: "2007-09-01", name: "test3", note: "note3", amount: "400.00", tax: "30.00", total: "430.00" }
                            ];
            //if you uncomment this, the scrollbars would appear
            /*for (var i = 0; i <= mydata.length; i++)
                $("#results").jqGrid('addRowData', i + 1, mydata[i]);*/
        });

超文本标记语言

<div>
    <table id="results"></table>
</div>

EDIT:为了更清楚,在上面的例子中,我想水平滚动标题。当数据被填充时,标题在垂直滚动时应该保持静态,而在水平滚动时应该与数据一起。
谢谢!

yacmzcpb

yacmzcpb1#

@用户1719160:

loadComplete: function () {

        if ($(this).jqGrid('getGridParam', 'reccount') == 0)
        {         
            $(".jqgfirstrow").css("height","1px");
        }

这个作品...不是很优雅...但它确实起到了作用。

piztneat

piztneat2#

要在垂直滚动时保持标题可见,请参阅Oleg的答案:fixing column headers while scrolling - jqgrid
要启用标题滚动,您可以在加载完成中执行此操作

loadComplete: function () {
        if ($(this).jqGrid('getGridParam', 'reccount') == 0){
          $(".ui-jqgrid-hdiv").css("overflow-x", "auto")
        }
          else{
              $(".ui-jqgrid-hdiv").css("overflow-x", "hidden")
          }

    }//loadComplete
gstyhher

gstyhher3#

这是我在jqgrid中没有数据时为hbar找到的最终解决方案。

loadComplete: function () {
    if ($(this).jqGrid('getGridParam', 'reccount') == 0)
    {                
        $("#grid > tbody").append("<tr id=\"my_row\" role=\"row\"><td colspan=\"15\" style=\"height:1px;\" role=\"gridcell\"></td></tr>")
    }        
},
vfh0ocws

vfh0ocws4#

我知道这是一个老问题,但如果其他人遇到这个问题,下面的代码对我来说很好用(将grid_client更改为正确的名称):

loadBeforeSend: function() {
    var headerWidth = $('#gview_grid_client .ui-jqgrid-hdiv div:first').width();
    $('#gview_grid_client .ui-jqgrid-bdiv div:first').css({
        width: headerWidth,
        height: 1
    })
}

找到了here的解决方案。这在我的情况下工作得很好,因为我的列上有过滤器&如果有人选择了一个过滤器,没有结果,然后取消选择该过滤器来重新填充表,则需要保持水平滚动位置。如果没有添加代码,表将重新填充并重置数据&滚动条到左侧,但标题仍然滚动到右侧。
希望这对其他人有帮助!

cmssoen2

cmssoen25#

差不多十年过去了,由于某种原因,这个问题仍然需要手动修复。
如果有人遇到这种情况,一般的解决方案如下:

_createNoDataRow: function() {

    return $('<tr>')
        .addClass(this.noDataRowClass)
        .append($('<td>')
        .addClass(this.cellClass)
        .attr('colspan', this.fields.length)
        .attr('width', this._headerRow.width())
        .append(this.renderTemplate(this.noDataContent, this)));
},

这个_createNoDataRow回调函数(未记录)在创建一个“no data”行时被调用,并允许你自己创建它。我们实际上只是将width属性添加到“no data”中,使其等于表头的宽度,从而触发x溢出网格主体并显示滚动。

注意:值得指出的是,如果标题的宽度太大,“未找到”文本可能会移出屏幕。在这种情况下,您可能需要使用CSS或将其转置回来,以免损害用户体验。

相关问题