我有一个 Streamlit Web 应用程序,它使用 AG 网格表来显示数据。作为应用程序的一部分,用户必须更新预测。然后将预测与预算进行比较。如果存在差异,则用户必须输入评论。为了表明这一点,我想根据各种条件以红色突出显示给定行的注释单元格:
另外我想指出评论尚未保存,但用户更新了评论
在我的 JS 代码中,格式化有效,但只有在我尝试编辑评论之后。更新预测后,方差计算会立即呈现,但注释单元格的格式不会更新。
在下面您可以看到存在差异。但只有在编辑评论、不输入任何内容并选择另一个单元格后,格式才会更新。
我考虑过使用 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)
我将 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;
}}
""")