Problem:
The app works locally but after deployment in azure, for some users the checkbox renders but selecting rows / toggling boolean does not update selected_rows or the returned data. Because selection stays empty, the Assignment panel never opens. I have a IP access restrictions in azure so only those can see the app who have their IP’s in azure.
Expected:
Clicking Select checkbox updates selected_rows → Assignment panel shows.
Clicking locked checkbox updates returned grid data.
Code Example:
import streamlit as st
import pandas as pd
from st_aggrid import AgGrid, GridOptionsBuilder, GridUpdateMode, JsCode, DataReturnMode
st.set_page_config(layout=“wide”)
st.title(“st-aggrid checkbox issue repro”)
Minimal dataset
df = pd.DataFrame(
{
“unique_id”: [1, 2, 3, 4, 5],
“name”: [“Alpha”, “Beta”, “Gamma”, “Delta”, “Epsilon”],
“locked”: [False, True, False, False, True],
“__blocked”: [False, False, False, False, False],
“__can_lock”: [True, True, True, True, True],
}
)
Create a separate “Select” column to force checkboxSelection rendering
t = df.copy()
t.insert(0, “Select”, “”) # must be non-boolean to avoid double-checkbox
gb = GridOptionsBuilder.from_dataframe(t)
Default columns read-only; we enable edit only for “locked”
gb.configure_default_column(
editable=False,
resizable=True,
sortable=True,
filter=False,
suppressMenu=True,
)
Hide helpers
gb.configure_column(“unique_id”, hide=True)
gb.configure_column(“__blocked”, hide=True)
gb.configure_column(“__can_lock”, hide=True)
Enable checkbox selection in a dedicated column
gb.configure_selection(
selection_mode=“multiple”,
use_checkbox=False,
suppressRowClickSelection=True,
suppressRowDeselection=False,
)
gb.configure_column(
“Select”,
header_name=“Select”,
checkboxSelection=True,
headerCheckboxSelection=True,
headerCheckboxSelectionFilteredOnly=True,
pinned=“left”,
width=90,
sortable=False,
filter=False,
)
Editable boolean checkbox column
can_edit_locked = JsCode(“”"
function(p){
if (!p.data) return false;
if (p.data.__blocked) return false;
return !!p.data.__can_lock;
}
“”")
gb.configure_column(
“locked”,
header_name=“Locked”,
editable=can_edit_locked,
cellRenderer=“agCheckboxCellRenderer”,
cellEditor=“agCheckboxCellEditor”,
type=[“booleanColumn”],
width=90,
)
grid_options = gb.build()
Immutable data + stable row id
grid_options[“immutableData”] = True
grid_options[“getRowId”] = JsCode(“function(p){ return String(p.data.unique_id); }”)
grid_resp = AgGrid(
t,
gridOptions=grid_options,
update_mode=GridUpdateMode.VALUE_CHANGED | GridUpdateMode.SELECTION_CHANGED,
data_return_mode=DataReturnMode.AS_INPUT,
allow_unsafe_jscode=True,
fit_columns_on_grid_load=True,
theme=“streamlit”,
height=350,
key=“grid_repro”,
)
st.subheader(“Debug output”)
st.write(“Selected rows:”, grid_resp.get(“selected_rows”))
st.write(“Returned data:”, grid_resp.get(“data”))
Deployment + client info:
streamlit==1.41.1, streamlit-aggrid==1.1.0, Python=3.12
Azure App Service.
I already tried:
Hard refresh / clear site data.
Different browser/incognito.
Disable extensions.
Change component key/remount, disable immutableData, etc.
What could block st-aggrid checkbox events only on some clients after deployment?