Кнопка «Добавить строку» с возможностью ввода данных добавляет только одну строку один раз - PullRequest
0 голосов
/ 31 марта 2020

Итак, у меня есть код, который создает таблицу данных с использованием таблицы ниже:

forecasts = ["Demand Plan", "Stat Forecast", "Year -1", "% growth (-1)", "Year -2", "% growth (-2)"]

app.layout = html.Div([
    dash_table.DataTable(
        id = 'table',
        columns = [{'name': 'Forecasts', 'id': 'Forecasts'}] + [{
                    'name': '{}'.format(j),
                    'id': 'column-{}'.format(i),
                    'deletable': True,
                    'renamable': True
                } for i,j in zip(range(5), [1,2,3,4,5])],

        data=[
                dict(Forecasts=i, **{'column-{}'.format(k): 0*j for k in range(5)})
                for i, j in zip(forecasts, range(len(forecasts)))
            ],
        editable = True,
        row_selectable='multi',
        #row_deletable=True,
        selected_rows=[1],
        selected_row_ids=['Stat Forecast'],
        fixed_columns={ 'headers': True, 'data': 1 },
        style_cell={'textAlign': 'center'},
        style_table={'overflowX': 'scroll',
                    'minWidth': '100%',
                    'padding':'10px'},
        css=[{"selector": ".show-hide", "rule": "display: none"}]
    ),
    html.Button('Add Row', id='add-row-button', n_clicks=0),
])


@app.callback(
    Output('table', 'data'),
    [Input('add-row-button', 'n_clicks')],
    [State('table', 'data'),
     State('table', 'columns')])
def add_row(n_clicks, rows, columns):
    rows=[
            dict(id=i, **{'column-{}'.format(k): j+1 for k in range(len(columns))})
            for i, j in zip(forecasts, range(len(forecasts)))
        ]


    if n_clicks > 0:
        rows.append({c['id']: '' for c in columns})
    return rows

Макет инициализирует таблицу данных просто отлично. Затем у меня есть обратный вызов, который изменяет строки таблицы данных - это также отлично работает. Моя проблема в последней части обратного вызова. У меня есть некоторый код, который предназначен для добавления строк в таблицу при нажатии кнопки. Независимо от того, сколько раз нажата кнопка, она добавляет только одну строку один раз, т. Е. Длина строк увеличивается только на одну, а потом никогда.

После некоторых экспериментов я понял, что это имеет что-то делать с изменением строк таблицы данных в том же обратном вызове я добавляю строки. Если я удаляю код, который изменяет строки, кнопка «добавить строку» работает, как и ожидалось, добавляя строку в таблицу каждый раз, когда я нажимаю на нее.

Пожалуйста, помогите мне найти способ обойти это, потому что это ведет меня сумасшедший

...