如何知道/捕获您所在的特定详细信息网格的“详细信息网格ID”? (ag-grid javascript)

时间:2019-07-10 13:24:54

标签: ag-grid master-detail

我有一个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&nbsp;&nbsp;<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);
});

1 个答案:

答案 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);
}