---
ADMIN EDIT
At the end of this post you can find the two most common scenarios that can exhibit this problem, and a video that illustrates it.
A potential workaround could be to avoid the second call to onread because that's where the problem lies, with code similar to this:
int readCounts { get; set; }
protected async Task ReadItems(GridReadEventArgs args)
{
if (readCounts != 1) // the second call is skipped - that's where the problem lies
{
Console.WriteLine("ONREAD with skip " + args.Request.Skip);
HttpResponseMessage response = await Http.PostAsJsonAsync("WeatherForecast", args.Request);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
DataEnvelope<WeatherForecast> envelope = await response.Content.ReadFromJsonAsync<DataEnvelope<WeatherForecast>>();
GridData = envelope.CurrentPageData;
Total = envelope.TotalItemCount;
StateHasChanged();
}
}
readCounts++;
}
where you may need to extend this a little to also use a flag for whether there was state loaded at all - if there wasn't, then the OnRead call may want to continue because it could be a legitimate user action. Whether this is needed is up to the app and whether your users already have a state saved (if you use OnStateChanged to save the state, they probably already do).
Another possible workaround is to always save Skip=0 in the state so that the user always starts at the top of the grid rather than juuust slightly off from where they expect.
---