Ag-Grid删除选中的行,更新Ag-Grid表并将选中的行保存到新的DataFrame Streamlit



我试图删除Ag-Grid表中选定的行,删除后更新/刷新Ag-Grid表。此外,我想保存选定的行到新的DataFrame。

它可能做的只是一个按钮点击(点击按钮Ag-Grid表更新,删除所选的行,并将其保存到DataFrame)?

我已经尝试了下面的方法,但在选择复选框行后立即删除,我不知道如何(如果可能的话)你可以保存它。

下面是示例代码:
df = pd.read_excel('test.xlsx', sheet_name='base_table')
js = JsCode("""
function(e) {
let api = e.api;     
let sel = api.getSelectedRows();
api.applyTransaction({remove: sel});
};
""")
gb_base = GridOptionsBuilder.from_dataframe(df, enableRowGroup=True, editable=True, groupable = True)
gb_base.configure_pagination(enabled=True, paginationAutoPageSize = False, paginationPageSize=20)
gb_base.configure_selection('multiple', use_checkbox=True)
gb_base.configure_grid_options(onRowSelected = js, pre_selected_rows = []) 
grid_options_base = gb_base.build()
table_base = AgGrid(df, gridOptions=grid_options_base, allow_unsafe_jscode=True, fit_columns_on_grid_load=True)

我建议不要将网格视为数据的持有者,而是在代码中保留数据模型,并对该代码进行操作。

网格是一个用户界面组件,它不是(不应该是)你的数据存储。

一旦你有一个数据存储不是网格,绑定你的网格到你的数据,例如网格的"行";财产。

然后,在你的函数中,找到选择(就像你已经做的那样),将它们保存在你需要的任何地方,然后从数据存储中删除该数据(而不是使用AgGrid Transaction来这样做)。

然后网格将重新渲染以匹配数据存储的新状态(尽管您可能必须将剩余的数据"行"分配给一个新的数组实例来触发重新渲染)。