我有一个Master-Detail Ag-grid。一列具有复选框(checkboxSelection:true)。详细信息网格具有一个带有按钮的自定义状态面板。当用户单击任何特定明细网格中的按钮时,我不知道如何仅从该特定明细网格中获取SelectedRows。
问题在于,它们可能会显示/打开多个细节,然后在每个“细节网格”上循环将包括来自所有打开的网格的结果。我正在尝试仅隔离用户单击按钮的网格。
我尝试遍历所有显示/打开的详细信息网格以获得详细信息网格ID。但是我没有看到任何显示我单击按钮的信息。
我尝试在按钮组件中查看在参数中是否有任何引用按钮所在的detailgrid ID的东西,但我也没有看到任何东西。
这是按钮组件:
function ClickableStatusBarComponent() {}
ClickableStatusBarComponent.prototype.init = function(params)
{
this.params = params;
this.eGui = document.createElement('div');
this.eGui.className = 'ag-name-value';
this.eButton = document.createElement('button');
this.buttonListener = this.onButtonClicked.bind(this);
this.eButton.addEventListener("click", this.buttonListener);
this.eButton.innerHTML = 'Cancel Selected Records <em class="fas fa-check" aria-hidden="true"></em>';
console.log(this.params);
this.eGui.appendChild(this.eButton);
};
ClickableStatusBarComponent.prototype.getGui = function()
{
return this.eGui;
};
ClickableStatusBarComponent.prototype.destroy = function()
{
this.eButton.removeEventListener("click", this.buttonListener);
};
ClickableStatusBarComponent.prototype.onButtonClicked = function()
{
getSelectedRows();
};
以下是循环查找所有打开的细节网格的代码:
function getSelectedRows()
{
this.gridOptions.api.forEachDetailGridInfo(function(detailGridApi) {
console.log(detailGridApi.id);
});
答案 0 :(得分:0)
我能够解决这个问题,所以以为我可以将答案发布出来,以防其他人遇到同样的问题。我不确定我是否采用了最佳方法,但是它似乎可以按需工作。
首先,根据文档,我还尝试使用自定义的细节单元格渲染器,但最终出现了相同的问题。我能够在详细的onGridReady函数中检索DetailGridID,但无法弄清楚如何在其他地方使用该变量。
所以我回到上面的代码,单击按钮时,我执行了一个jquery .closest来查找具有row-id属性(代表DetailgridID)的最接近的div,然后使用特定的ID,用于获取仅在该详细信息网格中选择的行。
更新的按钮点击代码:
ClickableStatusBarComponent.prototype.onButtonClicked = function()
{
getSelectedRows(this);
};
更新了getSelectedRow函数:
function getSelectedRows(clickedBtn)
{
var detailGridID = $(clickedBtn.eButton).closest('div[row-id]').attr('row-id');
var detailGridInfo = gridOptions.api.getDetailGridInfo(detailGridID);
const selectedNodes = detailGridInfo.api.getSelectedNodes()
const selectedData = selectedNodes.map( function(node) { return node.data })
const selectedDataStringPresentation = selectedData.map( function(node) {return node.UniqueID}).join(', ')
console.log(selectedDataStringPresentation);
}