jqGrid“ addRowData”到“ first”不起作用

问题描述 投票:3回答:2

我无法使用以下行将行添加到jqGrid表的顶部:

jQuery("#myTable").jqGrid('addRowData', 0, myData, "first");

它照常添加到列表的底部

有没有人尝试过并为他们工作?

在我的表中,先前添加的行的索引从0到N

我正在使用jqGrid v3.8.1和jQuery 1.4.3

<html>

<head>
    <link rel="stylesheet" type="text/css" media="screen" href="css/jquery-ui-1.8.5.custom.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="css/ui.jqgrid.css" />

    <script src="js/jquery-1.4.3.js" type="text/javascript"></script>
    <script src="js/i18n/grid.locale-en.js" type="text/javascript"></script>
    <script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>
    <script src="js/jquery-ui-1.8.5.custom.min.js" type="text/javascript"></script>
</head>

<script type="text/javascript">
    $(document).ready(function () {


        jQuery("#myTable").jqGrid({
            datatype: "local",
            colNames: ['Data ID', 'Device'],
            colModel: [{
                    name: 'DATA_ID',
                    index: 'DATA_ID',
                    sorttype: "int",
                    width: 22,
                    align: "center",
                    sortable: false
                },
                {
                    name: 'DATA_DN',
                    index: 'DATA_DN',
                    width: 60,
                    align: "center",
                    sortable: false
                },
            ],
            width: "1216",

        });

        var myData = [{
            "DATA_ID": "9",
            "DATA_DN": "sony"
        }, {
            "DATA_ID": "10",
            "DATA_DN": "panasonic"
        }];
        var newData = [{
            "DATA_ID": "0",
            "DATA_DN": "national"
        }, {
            "DATA_ID": "1",
            "DATA_DN": "samsung"
        }];

        for (var i = 0; i < myData.length; i++) {
            jQuery("#myTable").jqGrid('addRowData', i, myData[i]);
        }

        jQuery("#myTable").addRowData(0, newData, "first");

        //jQuery("#myTable").trigger("reloadGrid");

    });
</script>
</head>

<body>
    <table id="myTable"></table>
    <div id="myTable_pager"></div>
</body>

</html>
jquery jqgrid
2个回答
6
投票

很遗憾您没有发布使用的完整JavaScript代码。所以我只能猜测会发生什么。

例如,如果将myData定义为数组([...])而不是对象({...}),则位置参数将被值“ last”覆盖。

jqGrid是一个开源项目,您可以检查addRowData函数here的功能。您可以确切地看到在哪种情况下将使用位置参数“ last”。

如果在问题中附加可用于重现您描述的问题的代码,其他人可以验证该代码并在jqGrid中找到错误或在代码中找到错误。在两种情况下,您都有机会成为赢家。

UPDATED您发布的代码有一些小问题。

首先,您应该在colModel定义中的']'前删除逗号。其次,newData是一个数组,因此最后一个参数将从“ first”替换为“ last”。其他一些小但重要的问题是:您必须在HTML代码的开头使用<!DOCTYPE html ...>,将JavaScript代码放在//<![CDATA[ ... //]]>的内部,然后在HTML标头中插入<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

固定代码如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Demonstration how programatically select grid row which are not on the first page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/redmond/jquery-ui.css" />
    <link rel="stylesheet" type="text/css" href="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.8.1/css/ui.jqgrid.css" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.8.1/js/i18n/grid.locale-en.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.8.1/js/jquery.jqGrid.min.js"></script>
    <script type="text/javascript">
    //<![CDATA[
        jQuery(document).ready(function () {
            var grid = jQuery("#myTable");
            grid.jqGrid({
                datatype: "local",
                colNames:['Data ID','Device'],
                colModel:[
                    {name:'DATA_ID',index:'DATA_ID', sorttype:"int", width:22, align:"center", sortable:false},
                    {name:'DATA_DN',index:'DATA_DN', width:60, align:"center", sortable:false},
                ],
                width: "1216"
              });

            var myData = [{"DATA_ID":"9", "DATA_DN": "sony"}, {"DATA_ID":"10", "DATA_DN": "panasonic"}];
            var newData = [{"DATA_ID":"0", "DATA_DN": "national"}, {"DATA_ID":"1", "DATA_DN": "samsung"}];

            for(var i=0;i<myData.length;i++) {
                grid.jqGrid('addRowData', i, myData[i]);
            }

            for (i=0;i<newData.length;i++) {
                grid.jqGrid('addRowData', myData.length+i, newData[newData.length-i-1], "first");
            }
            //grid.trigger("reloadGrid");
        });
    //]]>
    </script>
</head>
<body>
    <table id="myTable"><tr><td/></tr></table>
</body>
</html>

另请参见here。如何使用W3 Validator验证HTML代码的最新版本是correct

尽管如此,建议使用附加的隐藏列进行排序。


0
投票

问题是,网格在addRowData调用之后被重新加载并排序,并且将按照其排序顺序对网格进行排序-因此在调用addRowData之后不要调用reloadGrid-尽管新闻添加表行的ID是“未定义” ...

© www.soinside.com 2019 - 2024. All rights reserved.