我有一个组件可以显示数据库中多达 200000 名运动员。
它工作得很好,但是当我添加一个带有国家列表的选择时,我可以看到结果计数已更新,但 Virtualize 组件在我滚动之前不会更新?
@page "/persons"
@inject HttpClient Http
<div class="container-fluid">
<div class="row">
<div class="col-12">
<h1>@($"{totalindividu:### ### ##0}") athletes linked</h1>
</div>
</div>
<div class="row">
<div class="col-4">
<select class="form-control" @onchange="ChangePays">
<option value="-1" selected>Pas de sélection sur le pays</option>
@if (pays != null)
{
@foreach (var p in pays)
{
<option value="@p.aatpays_id">@p.aaipays_nom</option>
}
}
</select>
</div>
<div class="col-4"> </div>
<div class="col-4"><p>@selpays</p></div>
</div>
<div class="row">
<div class="col-12">
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>Code</th>
<th>Nom long</th>
<th>Pays</th>
<th>Discipline</th>
<th>Date de naissance</th>
</tr>
</thead>
<tbody>
<Virtualize Context="individu" ItemsProvider="@LoadIndividus">
<ItemContent>
<tr>
<td style="width: 100px">@individu.aatindividu_id</td>
<td style="width: 100px">@individu.aalindividu_code</td>
<td>@individu.aaiindividu_nomLong</td>
<td style="width: 200px">@individu.aaipays_nom</td>
<td style="width: 200px">@individu.aaidiscipline_nom</td>
<td style="width: 100px">@individu.aatindividu_dateNaissance</td>
</tr>
</ItemContent>
<Placeholder>
<tr>
<td style="width: 100px">Loading...</td>
<td style="width: 100px">Loading...</td>
<td>Loading...</td>
<td style="width: 200px">Loading...</td>
<td style="width: 200px">Loading...</td>
<td style="width: 100px">Loading...</td>
</tr>
</Placeholder>
</Virtualize>
</tbody>
</table>
</div>
</div>
</div>
@code {
private int totalindividu = 0;
private string selpays = "-1";
private BdsPays[] pays = null;
private BdsIndividu[] individus = null;
protected override async Task OnInitializedAsync()
{
pays = await Http.GetFromJsonAsync<BdsPays[]>("api/BdsAa/pays/1");
//individus = await LoadIndividus(0, 50);
}
private async Task<BdsIndividu[]> LoadIndividus(int start, int count)
{
totalindividu = await Http.GetFromJsonAsync<int>($"api/BdsAa/individusinoutcount/1/33/{selpays}");
individus = await Http.GetFromJsonAsync<BdsIndividu[]>($"api/BdsAa/individusinout/1/33/{start}/{count}/{selpays}");
return individus;
}
private async ValueTask<ItemsProviderResult<BdsIndividu>> LoadIndividus(ItemsProviderRequest request)
{
individus = await LoadIndividus(request.StartIndex, request.Count);
StateHasChanged();
return new ItemsProviderResult<BdsIndividu>(individus, totalindividu);
}
private async Task ChangePays(ChangeEventArgs e)
{
selpays = e.Value.ToString();
individus = null;
StateHasChanged();
}
}
当我的过滤器更改时强制更新表格的任何想法?让
最佳答案
您应该可以调用RefreshDataAsync()
如下。
来自 GitHub添加此功能的问题
For the more general case where the developer uses ItemsProvider, we should add a new public async Task RefreshDataAsync method on Virtualize. Developers can call this if they have reason to think the underlying data source output may have changed, for example when a user clicks a "Refresh" button. This would just do the same thing that happens when the user scrolls into a new set of data.
关于请求更改时 Blazor Virtualize 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65449283/