Итак, у меня есть код, который создает таблицу данных с использованием таблицы ниже:
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
Макет инициализирует таблицу данных просто отлично. Затем у меня есть обратный вызов, который изменяет строки таблицы данных - это также отлично работает. Моя проблема в последней части обратного вызова. У меня есть некоторый код, который предназначен для добавления строк в таблицу при нажатии кнопки. Независимо от того, сколько раз нажата кнопка, она добавляет только одну строку один раз, т. Е. Длина строк увеличивается только на одну, а потом никогда.
После некоторых экспериментов я понял, что это имеет что-то делать с изменением строк таблицы данных в том же обратном вызове я добавляю строки. Если я удаляю код, который изменяет строки, кнопка «добавить строку» работает, как и ожидалось, добавляя строку в таблицу каждый раз, когда я нажимаю на нее.
Пожалуйста, помогите мне найти способ обойти это, потому что это ведет меня сумасшедший