javascript - 如何在行单击时用数据填充指定的详细信息网格
问题描述
我是 Ag-Grid 的新手。我在 JavaScript 中使用它。我正在学习主/细节网格。
我想知道您是否能够在初始初始化之外使用行数据填充详细信息网格。
例如,在我的代码片段中,我有这个语句为所有详细网格设置数据:
getDetailRowData: function (params) {
params.successCallback(params.data.callRecords);
}
现在,如果我在网格选项声明中没有该语句怎么办,这将导致我的详细网格没有数据。是否可以在初始网格选项声明之外的详细网格中填充数据,或者可能在单独的函数中填充数据?下面的代码片段
var gridOptions = {
columnDefs: [
// group cell renderer needed for expand / collapse icons
{ field: 'name', cellRenderer: 'agGroupCellRenderer' },
{ field: 'account' },
{ field: 'calls' },
{ field: 'minutes', valueFormatter: "x.toLocaleString() + 'm'" },
],
defaultColDef: {
flex: 1,
},
masterDetail: true,
detailCellRendererParams: {
detailGridOptions: {
columnDefs: [
{ field: 'callId' },
{ field: 'direction' },
{ field: 'number', minWidth: 150 },
{ field: 'duration', valueFormatter: "x.toLocaleString() + 's'" },
{ field: 'switchCode', minWidth: 150 },
],
defaultColDef: {
flex: 1,
},
},
getDetailRowData: function (params) {
params.successCallback(params.data.callRecords);
},
},
onFirstDataRendered: onFirstDataRendered,
};
function onFirstDataRendered(params) {
// arbitrarily expand a row for presentational purposes
setTimeout(function () {
params.api.getDisplayedRowAtIndex(1).setExpanded(true);
}, 0);
}
// setup the grid after the page has finished loading
document.addEventListener('DOMContentLoaded', function () {
var gridDiv = document.querySelector('#myGrid');
new agGrid.Grid(gridDiv, gridOptions);
agGrid
.simpleHttpRequest({
url: 'https://www.ag-grid.com/example-assets/master-detail-data.json',
})
.then(function (data) {
gridOptions.api.setRowData(data);
});
});
<link href="https://unpkg.com/ag-grid-community/dist/styles/ag-theme-alpine.css" rel="stylesheet"/>
<link href="https://unpkg.com/ag-grid-community/dist/styles/ag-grid.css" rel="stylesheet"/>
<script src="https://unpkg.com/ag-grid-community/dist/ag-grid-community.min.noStyle.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<title>JavaScript example</title>
<meta charSet="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<style media="only screen">
html, body {
height: 100%;
width: 100%;
margin: 0;
box-sizing: border-box;
-webkit-overflow-scrolling: touch;
}
html {
position: absolute;
top: 0;
left: 0;
padding: 0;
overflow: auto;
}
body {
padding: 1rem;
overflow: auto;
}
</style>
</head>
<body>
<div id="myGrid" class="ag-theme-alpine" style="height: 100%;">
</div>
<script>var __basePath = './';</script>
<script src="https://unpkg.com/@ag-grid-enterprise/all-modules@25.1.0/dist/ag-grid-enterprise.min.js">
</script>
<script src="main.js">
</script>
</body>
</html>
解决方案
在初始化主网格时,根本不需要拥有所有数据。您可以仅使用主网格所需的数据来初始化主网格。
getDetailRowData
仅在展开行时才会调用,此时您可以进行必要的 API 调用并更新详细信息网格,如下所示。
getDetailRowData: function (params) {
// This can be API call
Promise.resolve(data).then((res) => {
params.successCallback(res);
})
},
const data = [
{
"name": "Nora Thomas",
"account": 177000,
"calls": 24,
"minutes": 25.65
},
{
"name": "Mila Smith",
"account": 177001,
"calls": 24,
"minutes": 26.216666666666665
}
];
const callRecords = {
"177000": [
{
"name": "susan",
"callId": 555,
"duration": 72,
"switchCode": "SW3",
"direction": "Out",
"number": "(00) 88542069"
},
{
"name": "susan",
"callId": 556,
"duration": 61,
"switchCode": "SW3",
"direction": "In",
"number": "(01) 7432576"
},
],
"177001": [
{
"name": "susan",
"callId": 579,
"duration": 23,
"switchCode": "SW5",
"direction": "Out",
"number": "(02) 47485405"
},
{
"name": "susan",
"callId": 580,
"duration": 52,
"switchCode": "SW3",
"direction": "In",
"number": "(02) 32367069"
}
]
}
var gridOptions = {
columnDefs: [
// group cell renderer needed for expand / collapse icons
{ field: 'name', cellRenderer: 'agGroupCellRenderer' },
{ field: 'account' },
{ field: 'calls' },
{ field: 'minutes', valueFormatter: "x.toLocaleString() + 'm'" },
],
defaultColDef: {
flex: 1,
},
masterDetail: true,
detailCellRendererParams: {
detailGridOptions: {
columnDefs: [
{ field: 'callId' },
{ field: 'direction' },
{ field: 'number', minWidth: 150 },
{ field: 'duration', valueFormatter: "x.toLocaleString() + 's'" },
{ field: 'switchCode', minWidth: 150 },
],
defaultColDef: {
flex: 1,
},
},
getDetailRowData: function (params) {
Promise.resolve(callRecords[params.data.account]).then((res) => {
params.successCallback(res);
})
},
},
onFirstDataRendered: onFirstDataRendered,
};
function onFirstDataRendered(params) {
// arbitrarily expand a row for presentational purposes
setTimeout(function () {
params.api.getDisplayedRowAtIndex(1).setExpanded(true);
}, 0);
}
// setup the grid after the page has finished loading
document.addEventListener('DOMContentLoaded', function () {
var gridDiv = document.querySelector('#myGrid');
new agGrid.Grid(gridDiv, gridOptions);
gridOptions.api.setRowData(data);
});
<link href="https://unpkg.com/ag-grid-community/dist/styles/ag-theme-alpine.css" rel="stylesheet" />
<link href="https://unpkg.com/ag-grid-community/dist/styles/ag-grid.css" rel="stylesheet" />
<script src="https://unpkg.com/ag-grid-community/dist/ag-grid-community.min.noStyle.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<title>JavaScript example</title>
<meta charSet="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style media="only screen">
html,
body {
height: 100%;
width: 100%;
margin: 0;
box-sizing: border-box;
-webkit-overflow-scrolling: touch;
}
html {
position: absolute;
top: 0;
left: 0;
padding: 0;
overflow: auto;
}
body {
padding: 1rem;
overflow: auto;
}
</style>
</head>
<body>
<div id="myGrid" class="ag-theme-alpine" style="height: 100%;">
</div>
<script>
var __basePath = './';
</script>
<script src="https://unpkg.com/@ag-grid-enterprise/all-modules@25.1.0/dist/ag-grid-enterprise.min.js">
</script>
<script src="main.js">
</script>
</body>
</html>
推荐阅读
- python - 日期时间模块中异常消息的来源。ValueError:10000 年超出范围
- jenkins-pipeline - UrbanCode Deploy - 即时将组件映射到代理
- ruby-on-rails - 构建步骤“执行 shell”在 Jenkins CI 上将构建标记为失败,没有任何错误
- mongodb - 无法连接到本地主机上的我的 mongodb 服务器
- c# - 匿名委托 Ref 参数
- .net-core - 使用 .net Core 3.1 的 Kestrel ssl JSON 配置中的证书问题
- java - 我正在使用扫描仪创建一个对象,如何将它存储到一个数组中以组成一组用户声明的参数
- objective-c - SWIFT - 代表和协议
- java - 使用正则表达式拆分字符串并按组提取结果
- python - 使用射线演员在哪里导入张量流?