【问题标题】:How do I refresh an ag-grid data table? Having trouble with api.refreshCells如何刷新 ag-grid 数据表? api.refreshCells 遇到问题
【发布时间】:2019-11-11 01:23:27
【问题描述】:

我正在尝试创建代码以根据示例代码刷新表格。但是,该表并不令人耳目一新。该代码使用更改数据按钮来更改 JavaScript 变量的值,然后在刷新网格时使用该变量。

很遗憾,我无法刷新网格。我尝试了几种不同的方法,包括 api.refreshCells() 和 api.redrawRows()。有人可以提供有关问题可能是什么的信息吗?

// main.js

let columnsDefinitions = [
    {field: 'a'},
    {field: 'b'},
    {field: 'c'},
    {field: 'd'},
    {field: 'e'},
    {field: 'f'}
];

let data = [
    { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
    { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
    { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
    { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
    { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
    { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
];

let gridOptions =
    {
        columnDefs: columnsDefinitions,
        rowData: [],
        enableCellChangeFlash: true,
        onGridReady: function (params)
        {
            params.api.setRowData(data);
        },
        onFirstDataRendered(params)
        {
            params.api.sizeColumnsToFit();
        }
    };

function changeData()
{
    data = [
        { 'a' : 9, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
        { 'a' : 9, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
        { 'a' : 9, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
        { 'a' : 9, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
        { 'a' : 9, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
        { 'a' : 9, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5, 'f' : 6 },
    ];
    console.log(data);

    gridOptions.rowData = data;
    gridOptions.api.refreshCells({force : true});

    // Other options I have tried:
    // gridOptions.api.redrawRows();
    // gridOptions.api.redrawRows({rowNodes: data$ArrayDictionary, force: true});
    // gridOptions.api.sizeColumnsToFit();
}

document.addEventListener('DOMContentLoaded',
    () =>
    {
        let gridDiv = document.querySelector('#grid');
        new agGrid.Grid(gridDiv, gridOptions);
    });

<!DOCTYPE html>
<html lang="en">
<head>
    <script> var __basePath = ''; </script>
    <style> html, body { margin: 0; padding: 0; height: 100%; } </style>
    <script src="https://unpkg.com/ag-grid-community@21.0.1/dist/ag-grid-community.min.js"></script>
    <link rel="stylesheet" href="styles.css">
</head>
<body>

<div class="test-container">
    <div class="test-header">
        <button onclick="changeData()">Change Data</button>
    </div>
    <div id="grid" style="height: calc(100% - 30px);" class="ag-theme-balham-dark"></div>
</div>

<script src="main.js"></script>
</body>
</html>

/* styles.css */

.test-container {
    height: 100%;
    display: flex;
    flex-direction: column;
}

.test-header {
    padding: 4px;
    font-family: Verdana, Geneva, Tahoma, sans-serif;
    font-size: 13px;
}

.ag-theme-balham-dark .ag-floating-top {
    background-color: black;
}
.ag-theme-balham-dark .ag-floating-top .ag-row {
    background-color: black;
}
.ag-theme-balham-dark .ag-floating-bottom {
    background-color: black;
}
.ag-theme-balham-dark .ag-floating-bottom .ag-row {
    background-color: black;
}

【问题讨论】:

    标签: ag-grid


    【解决方案1】:

    您没有正确更新网格数据。您需要使用网格api 上的setRowData 方法来更新表中的所有数据。

    在 ag-grid 的文档 here 中查看更新网格数据的不同方式。

    here 是您问题的一个有效示例。

    【讨论】:

      【解决方案2】:

      有 2 个选项:update 或 refreshCells

      1)
        const row = this.yourList[index]
        this.gridApi.applyTransaction({ update: [row] })
      2)        
      
        this.gridApi.refreshCells({force : true});
      

      【讨论】:

        猜你喜欢
        • 2021-03-02
        • 2021-12-06
        • 2022-01-14
        • 2020-07-04
        • 2019-08-23
        • 2017-11-15
        • 1970-01-01
        • 1970-01-01
        • 2018-04-30
        相关资源
        最近更新 更多