需求:獲取 DataGrid 某列(如 `price`)的所有行值,用於前端求和、導出 Excel 或圖表繪製。
// 返回所有數據行的數組(包含當前頁/所有頁視分頁模式)
var rows = $('#dg').datagrid('getRows');
// 提取指定字段值
var field = 'price';
var values = rows.map(row => row[field]); // ES6
// 或兼容寫法
var values = [];
for (var i = 0; i < rows.length; i++) values.push(rows[i][field]);
var total = values.reduce((sum, v) => sum + (parseFloat(v) || 0), 0);
$('#totalPrice').text('總計:' + total.toFixed(2));
function exportColumnCsv(field, filename) {
var rows = $('#dg').datagrid('getRows');
var header = $('#dg').datagrid('getColumnOption', field).title;
var csv = [header].concat(rows.map(r => r[field])).join('\n');
var blob = new Blob([csv], {type: 'text/csv;charset=utf-8;'});
var link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = filename || field + '.csv';
link.click();
}
若 `pagination:true` 且 `serverSide:true`,`getRows` 僅返回**當前頁**數據。需調用後端導出接口或臨時關閉分頁:
// 方案一:後端提供 /export?field=price 接口,返回完整 CSV/Excel 流
// 方案二:前端臨時載入全量(慎用,大數據會卡死)
$('#dg').datagrid('options').pagination = false;
$('#dg').datagrid('load', { _export_all: 1 }); // 後端識別返回全部
// 導出完成後恢復分頁
$('#dg').datagrid('options').pagination = true;
$('#dg').datagrid('load');