내 코드는 다음과 같습니다.
<table id="employees"><tr><td></td></tr></table>
<div id="pager"></div>
<script type="text/javascript">
jQuery("#employees").jqGrid({
datatype: "local",
height: 250,
colNames: ['Employee #', 'Name', 'Trade'],
colModel: [
{ name: 'num', index: 'num', width: 100, sorttype: "int" },
{ name: 'name', index: 'name', width: 300 },
{ name: 'trade', index: 'trade', width: 80 },
],
multiselect: true,
pager: '#pager',
rowNum: 10,
rowList: [10, 20, 30],
sortname: "num",
sortorder: "desc",
scroll: false,
viewrecords: true,
autoencode: true,
height: 'auto',
caption: "Equipment"
});
var mydata = [
{ num: "492", name: "Doug Anderson", trade: "WS" },
{ num: "696", name: "William Anderson", trade: "OP" },
{ num: "826", name: "Chris Autry", trade: "WF" },
{ num: "206", name: "Tom Beffa", trade: "OP" },
{ num: "799", name: "Glenn Bixler", trade: "LB" },
{ num: "360", name: "Pete Bober", trade: "OP" },
{ num: "7", name: "Scott Burgie", trade: "PFW" },
{ num: "476", name: "James Click", trade: "W" },
{ num: "775", name: "Bryan Darst", trade: "LB" },
{ num: "249", name: "Bob Dunham", trade: "LB" },
{ num: "10", name: "Tom Ekclund", trade: "WGF" },
{ num: "390", name: "Noel Edwards", trade: "W" }
];
for (var i = 0; i <= mydata.length; i++)
jQuery("#employees").jqGrid('addRowData', i + 1, mydata[i]);
</script>
내 문제는 호출기가 표시되지만 "0 중 1"이라고 말한 다음 10 개 대신 모든 행을 표시한다는 것입니다. 이상한 점은 페이지가로드 된 후 정렬 열을 변경하거나 행 수를 변경하는 것입니다. 보여주기 위해 제대로 작동하기 시작합니다. 예를 들어 페이지를로드하고 표시 할 행 수를 20 개로 전환하면 맨 아래에 "1 of 1"이 표시되고 다시 10으로 설정하면 2 페이지가 표시됩니다. 전환 할 수 있습니다. 페이지로드 직후에 작동하지 않는 이유를 알 수 없습니다.
설명 된 문제의 원인은 addRowData
데이터를 채우는 데 사용하기 때문입니다 . 공식 jqGrid 데모 페이지 에 "Loading Data"/ "Array Data"에서 찾을 수있는 매우 가까운 코드가 포함되어 있다는 것은 매우 안타깝 습니다. 이 코드에는 작은 오류 ( i <= mydata.length
로 대체되어야 함 i < mydata.length
) 가있을 뿐만 아니라 매우 비효율적입니다. 데모 페이지는 매우 오래되었습니다. jqGrid 3.7 ( "버전 3.7의 새로운 기능"/ "한 번에 배열 데이터로드"참조)부터 훨씬 더 효과적인 방법이 있습니다 : data
매개 변수 사용 .
Instead of filling the data in loop you can extend every item of mydata
array with additional property id
and use just data: mydata
option. In the case the data will be first sorted (corresponds to sortname: "num"
, sortorder: "desc"
which you use) and then the first page will be displayed. The user can use pager to navigate over the pages of data.
If the value of num
which you displays is already unique (have different values in every row) then you don't need to add id
property to mydata
array. Instead of that you can add key: true
property in the definition of num
column in colModel
. After that jqGrid will use the value from num
column as "rowid" (the value of id
attribute assigned to <tr>
elements of the grid).
또한 당신이 사용하는 것이 좋습니다 gridview: true
모든 그리드에서 옵션을 제거 index
에서 colModel
당신과 같은 값을 사용하는 경우 name
. 그런데 데이터 유형 : "local"을 사용하는 경우 및에 대해 동일한 값을 제거 하거나 지정 해야 합니다 .index
index
name
따라서 최종 코드는 다음과 같을 수 있습니다.
var mydata = [
{ num: "492", name: "Doug Anderson", trade: "WS" },
{ num: "696", name: "William Anderson", trade: "OP" },
{ num: "826", name: "Chris Autry", trade: "WF" },
{ num: "206", name: "Tom Beffa", trade: "OP" },
{ num: "799", name: "Glenn Bixler", trade: "LB" },
{ num: "360", name: "Pete Bober", trade: "OP" },
{ num: "7", name: "Scott Burgie", trade: "PFW" },
{ num: "476", name: "James Click", trade: "W" },
{ num: "775", name: "Bryan Darst", trade: "LB" },
{ num: "249", name: "Bob Dunham", trade: "LB" },
{ num: "10", name: "Tom Ekclund", trade: "WGF" },
{ num: "390", name: "Noel Edwards", trade: "W" }
];
$("#employees").jqGrid({
datatype: "local",
data: mydata,
colNames: ["Employee #", "Name", "Trade"],
colModel: [
{ name: "num", width: 100, key: true, sorttype: "int" },
{ name: "name", width: 300 },
{ name: "trade", width: 80 },
],
multiselect: true,
pager: "#pager",
rowNum: 10,
rowList: [10, 20, 30],
sortname: "num",
sortorder: "desc",
viewrecords: true,
autoencode: true,
height: "auto",
gridview: true,
caption: "Equipment"
});
작은 버그를 수정했습니다 . 오류 인 height
속성을 두 번 지정 했습니다 ( height: 250
및 height: 'auto'
).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다