为什么 "allData" 是一个空数组?
Why "allData" is an empty array?
我正在尝试从 jqGrid(免费版本和最新版本)获取数据,假设我得到:
- 如果选择none则所有数据
- 所选数据(如果有)
我是这样做的:
$(function () {
var $order_logs = $('#order_logs');
$order_logs.jqGrid({
url: Routing.generate('api_order_logs'),
datatype: "json",
colModel: $colmodel.data('values'),
width: 980,
height: 300,
pager: true,
toppager: true,
hoverrows: true,
shrinkToFit: true,
autowidth: true,
rownumbers: true,
viewrecords: true,
rowList: [25, 50, 100],
rownumWidth: 60,
gridview: true,
sortable: {
options: {
items: ">th:not(:has(#jqgh_order_logs_cb,#jqgh_order_logs_rn,#jqgh_order_logs_actions),:hidden)"
}
},
jsonReader: {
root: 'rows',
page: 'page',
total: 'total',
records: 'records',
cell: '',
repeatitems: false
},
cmTemplate: {autoResizable: true, editable: true},
autoResizing: {compact: true, resetWidthOrg: true},
autoresizeOnLoad: true
}).jqGrid('navGrid', {
edit: false,
add: false,
del: false,
search: false,
refresh: true,
refreshstate: "current",
cloneToTop: true
}).jqGrid('navButtonAdd', {
caption: 'Export',
title: 'Export',
onClickButton: function () {
var filteredData = $order_logs.jqGrid("getGridParam").lastSelectedData,
allData = $order_logs.jqGrid('getGridParam', 'data');
exportData(filteredData, allData);
}
});
});
function exportData(filteredData, allData) {
if (filteredData.length === 0 || allData.length === 0) {
alert('There is no data to export');
return;
}
// Export only the filtered data
if (filteredData.length > 0) {
return;
}
// Export all the grid data
}
出于某种原因,allData
的值始终是一个空数组,我不确定,因为我使用的代码与每个人都在使用的代码相同,并且在 SO 的很多答案中找到。
更新:
当前网格包含六列和一组 60 条记录,每次总分页 20,但您可以将分页更改为 50 或 100。
谁能告诉我这是为什么?
我建议在小数据集的情况下使用 loadonce: true, forceClientSorting: true
选项:少于 1000 或 10000 行。它简化了服务器端代码,您可以使用免费 jqGrid 的全部功能。访问lastSelectedData
和data
的问题将得到解决。
除此之外,您还可以轻松使用许多高级功能,例如 createColumnIndex: true
、generateValue: true
或 generateDatalist: true
选项等。请参阅 4.14.1 版 README 中包含的演示。在我看来,良好且舒适的数据过滤是显示数据的部分。将数据放在本地允许查找唯一值并在过滤器栏中构建 <select>
或使用 <datalist>
具有自动完成功能。
我正在尝试从 jqGrid(免费版本和最新版本)获取数据,假设我得到:
- 如果选择none则所有数据
- 所选数据(如果有)
我是这样做的:
$(function () {
var $order_logs = $('#order_logs');
$order_logs.jqGrid({
url: Routing.generate('api_order_logs'),
datatype: "json",
colModel: $colmodel.data('values'),
width: 980,
height: 300,
pager: true,
toppager: true,
hoverrows: true,
shrinkToFit: true,
autowidth: true,
rownumbers: true,
viewrecords: true,
rowList: [25, 50, 100],
rownumWidth: 60,
gridview: true,
sortable: {
options: {
items: ">th:not(:has(#jqgh_order_logs_cb,#jqgh_order_logs_rn,#jqgh_order_logs_actions),:hidden)"
}
},
jsonReader: {
root: 'rows',
page: 'page',
total: 'total',
records: 'records',
cell: '',
repeatitems: false
},
cmTemplate: {autoResizable: true, editable: true},
autoResizing: {compact: true, resetWidthOrg: true},
autoresizeOnLoad: true
}).jqGrid('navGrid', {
edit: false,
add: false,
del: false,
search: false,
refresh: true,
refreshstate: "current",
cloneToTop: true
}).jqGrid('navButtonAdd', {
caption: 'Export',
title: 'Export',
onClickButton: function () {
var filteredData = $order_logs.jqGrid("getGridParam").lastSelectedData,
allData = $order_logs.jqGrid('getGridParam', 'data');
exportData(filteredData, allData);
}
});
});
function exportData(filteredData, allData) {
if (filteredData.length === 0 || allData.length === 0) {
alert('There is no data to export');
return;
}
// Export only the filtered data
if (filteredData.length > 0) {
return;
}
// Export all the grid data
}
出于某种原因,allData
的值始终是一个空数组,我不确定,因为我使用的代码与每个人都在使用的代码相同,并且在 SO 的很多答案中找到。
更新:
当前网格包含六列和一组 60 条记录,每次总分页 20,但您可以将分页更改为 50 或 100。
谁能告诉我这是为什么?
我建议在小数据集的情况下使用 loadonce: true, forceClientSorting: true
选项:少于 1000 或 10000 行。它简化了服务器端代码,您可以使用免费 jqGrid 的全部功能。访问lastSelectedData
和data
的问题将得到解决。
除此之外,您还可以轻松使用许多高级功能,例如 createColumnIndex: true
、generateValue: true
或 generateDatalist: true
选项等。请参阅 4.14.1 版 README 中包含的演示。在我看来,良好且舒适的数据过滤是显示数据的部分。将数据放在本地允许查找唯一值并在过滤器栏中构建 <select>
或使用 <datalist>
具有自动完成功能。