我无法使用以下行添加行到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>
答案 0 :(得分:6)
很遗憾您没有发布您使用的完整JavaScript代码。所以我只能猜测会发生什么。
例如,如果将myData
定义为数组([...]
)而不是对象({...}
),则位置参数将被值“last”覆盖。
jqGrid是一个开源项目,您可以检查addRowData
函数here的具体内容。您可以准确地看到将使用位置参数“last”的情况。
如果您使用可用于重现问题的代码附加您的问题,其他人可以验证代码并在jqGrid中找到错误或在代码中查找错误。在这两种情况下,你都有很好的机会成为胜利者。
更新您发布的代码存在一些小问题。
首先,您应该在colModel
定义中的']'之前删除逗号
其次newData
是一个数组,所以最后一个参数将从“first”替换为“last”
其他一些小但重要的问题是:您必须在HTML代码的开头使用<!DOCTYPE html ...>
,将JavaScript代码放在//<![CDATA[
... //]]>
内并插入<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
在HTML标题中。
固定代码将在
之后<!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。
然而,建议使用另外一个用于排序的隐藏列。
答案 1 :(得分:0)
问题是网格在 addRowData 调用之后被重新加载和排序,它会根据排序顺序对网格进行排序 - 所以不要在之后调用 reloadGrid 调用 addRowData - 虽然新闻添加的表行的ID是“未定义的”......