I want to do some validation on Datatable dropdown, as I don’t want the user to leave any column blank or not selected. So I need to generate an appropriate alert or Dialog box on it.
Hi @Gourav119
One way to ensure a selection is made is to set clearable=False
in the dropdown. In this example, the first column is clearable (the default) and the last column is not clearable:
import dash
import dash_html_components as html
import dash_table
import pandas as pd
from collections import OrderedDict
app = dash.Dash(__name__)
df = pd.DataFrame(OrderedDict([
('climate', ['Sunny', 'Snowy', 'Sunny', 'Rainy']),
('temperature', [13, 43, 50, 30]),
('city', ['NYC', 'Montreal', 'Miami', 'NYC'])
]))
app.layout = html.Div([
dash_table.DataTable(
id='table-dropdown',
data=df.to_dict('records'),
columns=[
{'id': 'climate', 'name': 'climate', 'presentation': 'dropdown'},
{'id': 'temperature', 'name': 'temperature'},
{'id': 'city', 'name': 'city', 'presentation': 'dropdown'},
],
editable=True,
dropdown={
'climate': {
'options': [
{'label': i, 'value': i}
for i in df['climate'].unique()
]
},
'city': {
'clearable': False,
'options': [
{'label': i, 'value': i}
for i in df['city'].unique()
]
}
},
# Two ways to fix alignment
# css=[{"selector": ".Select-value", "rule": 'padding-right: 42px'}],
# or
# style_cell={'textAlign': 'left'},
),
])
if __name__ == '__main__':
app.run_server(debug=True)
If you try this example you will see that the text alignment in the non-clearable column is incorrect. (I think it might be a bug) Here are two work-arounds:
-
Text align left: either
style_cell={'textAlign': 'left'},
or usestyle_data_conditional
to apply this only to the dropdown columns. -
Add padding:
css=[{"selector": ".Select-value", "rule": 'padding-right: 42px'}]