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

Dash表格多行选择:如何初始化全选及实现全选/取消全选?

Dash DataTable 行选中需求实现

问题描述

使用如下Dash表格代码时:

dash_table.DataTable(
            id='datasource-interactivity',
            columns= [
                #{"name": i, "id": i} for i in data_all.columns 
                {"name": i, "id": i, "selectable": True} for i in data_all.columns
                ],
            data=data_all.to_dict('records'), 
            filter_action="native",
            sort_action="native",
            sort_mode="multi",
            column_selectable="single",
            row_selectable="multi",   #<-----
            selected_columns=[],
            selected_rows=[],   #<------THIS
            page_action="native",
            page_current= 0,
            page_size= 100,
            )

需实现两个需求:

  1. 初始化时将所有行设置为选中状态
  2. 实现全选和取消全选的操作

解决方案

1. 初始化选中所有行

直接修改selected_rows的初始值为包含所有行索引的列表即可,利用数据源的长度生成索引范围:

selected_rows=list(range(len(data_all))),  # 替换原空列表

调整后的完整表格代码:

dash_table.DataTable(
            id='datasource-interactivity',
            columns= [
                {"name": i, "id": i, "selectable": True} for i in data_all.columns
                ],
            data=data_all.to_dict('records'), 
            filter_action="native",
            sort_action="native",
            sort_mode="multi",
            column_selectable="single",
            row_selectable="multi",
            selected_columns=[],
            selected_rows=list(range(len(data_all))),  # 初始化选中所有行
            page_action="native",
            page_current= 0,
            page_size= 100,
            )

2. 实现全选/取消全选操作

需要添加按钮组件并配合回调函数完成逻辑:

第一步:添加触发按钮

在页面布局中加入一个按钮:

html.Button('全选/取消全选', id='select-all-btn', n_clicks=0)

第二步:编写回调逻辑

监听按钮点击事件,根据当前选中状态切换全选/取消全选:

@app.callback(
    Output('datasource-interactivity', 'selected_rows'),
    Input('select-all-btn', 'n_clicks'),
    State('datasource-interactivity', 'selected_rows'),
    State('datasource-interactivity', 'data'),
    prevent_initial_call=False
)
def toggle_select_all(n_clicks, selected_rows, table_data):
    total_rows = len(table_data)
    # 对比当前选中行数与总行数,判断切换方向
    if len(selected_rows) == total_rows:
        return []  # 已全选则取消
    else:
        return list(range(total_rows))  # 未全选则选中所有行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:15:33