【问题标题】:Dash datatable with select all checkbox?带有全选复选框的破折号数据表?
【发布时间】:2020-05-20 04:55:51
【问题描述】:

我想知道是否有人知道如何在 Dash Datatable 中创建一个“全选”复选框(它应该在红框区域)?这个想法是它将选择数据表中所有可用的行。

我已经阅读了整个 Datatable 文档 (https://dash.plotly.com/datatable/interactivity),但没有提及这一点。尝试在线搜索也失败了。

我记得 dash-tables-experiment 有这个功能,但它已经被弃用了。非常感谢任何建议。

【问题讨论】:

    标签: plotly-dash


    【解决方案1】:

    目前dash_table.DataTable 元素中不支持此选项。但是,有一个解决方法是向 Dash layout 添加两个 dbc.Button() 部分,第一个用于全选,第二个用于取消全选。然后有一个@app.callback,一旦单击按钮,它就会(取消)全选。

    你会得到这样的东西:

    没有选择行:

    单击按钮后选择的所有行:

    轮到回调看起来像下面这样(感谢@neilpanchal in this git issue):

    from loguru import logger
    import dash
    ...
    
    @app.callback(
        [Output('df-table', 'selected_rows')],
        [
            Input('select-all-button', 'n_clicks'),
            Input('deselect-all-button', 'n_clicks')
        ],
        [
            State('df-table', 'data'),
            State('df-table', 'derived_virtual_data'),
            State('df-table', 'derived_virtual_selected_rows')
        ]
    )
    def select_all(select_n_clicks, deselect_n_clicks, original_rows, filtered_rows, selected_rows):
        ctx = dash.callback_context.triggered[0]
        ctx_caller = ctx['prop_id']
        if filtered_rows is not None:
            if ctx_caller == 'select-all-button.n_clicks':
                logger.info("Selecting all rows..")
                selected_ids = [row for row in filtered_rows]
                return [[i for i, row in enumerate(original_rows) if row in selected_ids]]
            if ctx_caller == 'deselect-all-button.n_clicks':
                logger.info("Deselecting all rows..")
                return [[]]
            raise PreventUpdate
        else:
            raise PreventUpdate
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2020-09-01
      • 2021-10-20
      • 1970-01-01
      • 2017-07-23
      • 2014-04-11
      • 2013-09-22
      相关资源
      最近更新 更多