AG 网格格式单元格在其他单元格不为 0 时需要注释

问题描述 投票:0回答:1

我有一个 Streamlit Web 应用程序,它使用 AG 网格表来显示数据。作为应用程序的一部分,用户必须更新预测。然后将预测与预算进行比较。如果存在差异,则用户必须输入评论。为了表明这一点,我想根据各种条件以红色突出显示给定行的注释单元格:

  • 评论是空的,但有差异
  • 评论没变,但方差变了(预测更新了)

另外我想指出评论尚未保存,但用户更新了评论

在我的 JS 代码中,格式化有效,但只有在我尝试编辑评论之后。更新预测后,方差计算会立即呈现,但注释单元格的格式不会更新。

在下面您可以看到存在差异。但只有在编辑评论、不输入任何内容并选择另一个单元格后,格式才会更新。 enter image description here enter image description here enter image description here

我考虑过使用 ValueFormatter,但似乎无法使其工作。

// Logic for requiring a forecast comment
if (params.colDef.field === 'forecast_comment' && params.data.hierarchy_level ===4) {{
    if (!(params.data.forecast_comment === params.data.unchanged_comment)) {{
    styles.backgroundColor = '{comment_required_unsaved_background}';
    }} 
    else if (params.data['annual_budget'] !== params.data['annual_forecast']
            && !params.data.forecast_comment) {{
    styles.backgroundColor = '{comment_required_empty_background}';
    }}
    else if (params.data['annual_budget'] !== params.data['annual_forecast']
            && params.data.annual_budget - params.data.annual_forecast !== params.data.forecast_variance) {{
    styles.backgroundColor = '{comment_required_unsaved_background}';
    }}

}}

以下是我配置专栏的方法:

    gb.configure_column("forecast_comment", 
                        header_name="Forecast Comment", 
                        cellStyle=jscode_comments, 
                        cellClass='custom-cell-text', 
                        wrapText=True, editable=make_forecast_editable, 
                        cellEditorPopup=True, 
                        cellEditor='agLargeTextCellEditor', 
                        cellEditorParams={'maxLength': 200}, minWidth=300, 
                        maxWidth=800)
javascript python ag-grid streamlit
1个回答
0
投票

我将 JS 代码作为 valueFormatter 插入,却忘记了返回样式这样简单又愚蠢的事情...

jscode_format_forecast_comment = JsCode(f"""
    function forecastCommentValueFormatter(params) {{
        let styles = {{ 'white-space': 'pre-wrap' }}; // Preserve whitespace and newlines
        if (params.colDef.field === 'forecast_comment' && params.data.hierarchy_level ===4) {{
            if (!(params.data.forecast_comment === params.data.unchanged_comment)) {{
            styles.backgroundColor = '{comment_required_unsaved_background}';
            }} 
            else if (params.data['annual_budget'] !== params.data['annual_forecast']
                    && !params.data.forecast_comment) {{
            styles.backgroundColor = '{comment_required_empty_background}';
            }}
            else if (params.data['annual_budget'] !== params.data['annual_forecast']
                    && params.data.annual_budget - params.data.annual_forecast !== params.data.forecast_variance) {{
            styles.backgroundColor = '{comment_required_unsaved_background}';
            }}

        }}
        return styles;
    }}
""")
© www.soinside.com 2019 - 2024. All rights reserved.