You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AG Grid评论单元格格式未随方差实时更新问题求助

问题解决:AG Grid评论单元格样式未随预测数据更新同步刷新

核心原因

AG Grid默认仅在当前单元格对应字段数据变更时,才会重新执行cellStyle逻辑。当你更新预测数据(修改annual_forecast或forecast_variance字段),forecast_comment单元格本身数据未发生变化,因此样式不会自动触发重新计算。

解决方案

1. 强制刷新受影响的行

在Streamlit中,当预测数据更新完成后,调用AG Grid的refresh_rows()方法,触发目标行的样式重新计算:

# 假设你的AG Grid实例为gb,predict_updated是检测预测是否更新的标志
if predict_updated:
    gb.refresh_rows()

如果使用st_aggrid,确保数据源存储在st.session_state中,更新数据后重新传入Grid,保证数据同步。

2. 优化cellStyle逻辑,显式声明依赖字段

修改JS样式逻辑,显式引用所有相关字段,让AG Grid监听这些字段的变化,自动触发样式更新:

// 修正后的评论单元格样式逻辑
if (params.colDef.field === 'forecast_comment' && params.data.hierarchy_level === 4) {
    // 显式定义所有依赖变量,触发AG Grid监听字段变化
    const hasVariance = params.data.annual_budget !== params.data.annual_forecast;
    const varianceChanged = params.data.annual_budget - params.data.annual_forecast !== params.data.forecast_variance;
    const commentModified = params.data.forecast_comment !== params.data.unchanged_comment;
    const commentEmpty = !params.data.forecast_comment;

    if (commentModified) {
        styles.backgroundColor = '#fff3cd'; // 替换为你的comment_required_unsaved_background实际颜色值
    } else if (hasVariance && commentEmpty) {
        styles.backgroundColor = '#f8d7da'; // 替换为你的comment_required_empty_background实际颜色值
    } else if (hasVariance && varianceChanged) {
        styles.backgroundColor = '#fff3cd';
    }
}

注:避免使用模板字符串引用颜色变量,直接写入实际颜色值,减少注入问题。

3. 替代方案:使用全局getRowStyle

如果cellStyle仍不生效,改用getRowStyle全局定义样式,确保列字段变更时触发计算:

// 全局行样式逻辑
const getRowStyle = function(params) {
    if (params.data.hierarchy_level === 4 && params.column.getColId() === 'forecast_comment') {
        const hasVariance = params.data.annual_budget !== params.data.annual_forecast;
        const varianceChanged = params.data.annual_budget - params.data.annual_forecast !== params.data.forecast_variance;
        const commentModified = params.data.forecast_comment !== params.data.unchanged_comment;
        const commentEmpty = !params.data.forecast_comment;

        if (commentModified) {
            return { backgroundColor: '#fff3cd' };
        } else if (hasVariance && commentEmpty) {
            return { backgroundColor: '#f8d7da' };
        } else if (hasVariance && varianceChanged) {
            return { backgroundColor: '#fff3cd' };
        }
    }
    return {};
}

在Streamlit中配置Grid选项:

gb.configure_grid_options(getRowStyle=jscode_get_row_style)

内容的提问来源于stack exchange,提问作者CMJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:52:40