Skip to content

Empty row responses break infinite row model grids #443

Description

@NiklasKappel

MWE

import numpy as np
import pandas as pd
from dash import Dash, Input, Output, callback, ctx, html
from dash_ag_grid import AgGrid

data = df = pd.DataFrame(
    {
        "id": range(1000),
        "value": np.random.rand(1000),
    }
)

clear_button = html.Button("Clear", id="clear")
reset_button = html.Button("Reset")

grid = AgGrid(
    columnDefs=[
        {"field": "id"},
        {"field": "value"},
    ],
    getRowId="params.data.id",
    rowModelType="infinite",
)


@callback(
    Output(grid, "getRowsResponse"),
    Input(grid, "getRowsRequest"),
    Input(clear_button, "n_clicks"),
    Input(reset_button, "n_clicks"),
    prevent_initial_call=True,
)
def update_rfq_grid_rows(
    request,
    n_clicks_clear,
    n_clicks_reset,
):
    if ctx.triggered_id == "clear":
        response = {
            "rowData": [],
            "rowCount": 0,
        }
        print(response)
        return response

    if request is None:
        partial_df = data.head(100)
    else:
        partial_df = data.iloc[request["startRow"] : request["endRow"]]

    response = {
        "rowData": partial_df.to_dict("records"),
        "rowCount": len(data.index),
    }
    print(response)
    return response


app = Dash()
app.layout = html.Div(
    children=[
        clear_button,
        reset_button,
        grid,
    ]
)

if __name__ == "__main__":
    app.run(debug=True)

What I do

  1. Run the app.
  2. Click the clear button.
  3. Click the reset button.

What I expect

After clicking the reset button, the grid should display data.

What I get

After clicking the reset button, the grid stays empty.

Why this is relevant

The two buttons mock my business logic. In my actual use case, the user can enter filter values into a form and click a button to filter the data in the grid. Some combinations of filter values are not fulfilled by any row in the dataset. As a result, the row response is empty. This is emulated by the clear button. Changing the filter settings should allow the user to fill the grid again with data. This is emulated by the reset button.

Environment

> pip freeze
blinker==1.9.0
certifi==2026.2.25
charset-normalizer==3.4.4
click==8.3.1
colorama==0.4.6
dash==4.0.0
dash_ag_grid==33.3.3
Flask==3.1.3
idna==3.11
importlib_metadata==8.7.1
itsdangerous==2.2.0
Jinja2==3.1.6
MarkupSafe==3.0.3
narwhals==2.17.0
nest-asyncio==1.6.0
numpy==2.2.6
packaging==26.0
pandas==2.3.3
plotly==6.5.2
python-dateutil==2.9.0.post0
pytz==2025.2
requests==2.32.5
retrying==1.4.2
six==1.17.0
typing_extensions==4.15.0
tzdata==2025.3
urllib3==2.6.3
Werkzeug==3.1.6
zipp==3.23.0

Activity

  1. BSd3v commented on Feb 27, 2026

    @BSd3v
    Collaborator

    Hello @NiklasKappel

    Check here and see if this helps your use-case.

    #59

    Essentially, never return a 0 value for the counts.

  2. NiklasKappel commented on Feb 27, 2026

    @NiklasKappel
    Author

    Thank you! Returning len(df.index) or 1 as "rowCount" works for me. I had to adjust my cell formatting function though, so that the single rendered row appears empty, and does not contain NaNs etc.

  3. camdecoster commented on Apr 1, 2026

    @camdecoster

    @NiklasKappel with this workaround, I'm inclined to close the issue. Do you feel the need to keep this open?

  4. NiklasKappel commented on Apr 1, 2026

    @NiklasKappel
    Author

    The workaround is not really intuitive, so maybe it should be documented in a well-visible location? I am fine either way.

  5. camdecoster commented on Apr 20, 2026

    @camdecoster

    @BSd3v do you feel like this issues rises to the level of a bug? If so, I'll leave this open.

  6. reopened this on Apr 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions