Hello,
I am trying to implement multi-selectable datagrid into my project. And have problems with holding the selected rows in memory. When I move to another page and back, the rows are unselected again.
I used directly the code from your example. For grid's data I use the LoadData approach.
Please, can you try to help me identify the problem? Thanks.
<RadzenColumn Size="12">
<RadzenCard Variant="Variant.Outlined" class="rz-my-4">
<RadzenStack Orientation="Orientation.Horizontal" Gap="0.5rem" AlignItems="AlignItems.Center" Wrap="FlexWrap.Wrap">
<RadzenCheckBox @bind-Value=@allowRowSelectOnRowClick Name="CheckBox1" />
<RadzenLabel Text="Allow row select on row click" Component="CheckBox1" />
<RadzenButton Text="Clear selected rows" Click="@(args => sablonySelectedRecords = null)" />
</RadzenStack>
</RadzenCard>
<RadzenCard Style="max-width: 100%">
<RadzenDataGrid @ref="sablonySPGrid" IsLoading=@isLoading Count="@sablonySPCount" Data="@sablonySPRecords" LoadData="@LoadSablonySPData"
AllowSorting="true" AllowPaging="true" PageSizeOptions="@pageSizeOptions" PageSizeText="@pageSizeText" PageSize="11"
PagingSummaryFormat="@pagingSummaryFormat" PagerHorizontalAlign="HorizontalAlign.Right" ColumnWidth="200px"
ShowPagingSummary="true" FilterMode="FilterMode.SimpleWithMenu" LogicalFilterOperator="LogicalFilterOperator.Or"
SelectionMode="DataGridSelectionMode.Multiple" @bind-Value=@sablonySelectedRecords>
<Columns>
<RadzenDataGridColumn Width="60px" Sortable="false" Filterable="false">
<HeaderTemplate>
<RadzenCheckBox TabIndex="-1" TriState="false" TValue="bool?" InputAttributes="@(new Dictionary<string,object>(){ { "aria-label", "Select all items" }})"
Value="@(sablonySelectedRecords == null || sablonySelectedRecords?.Any() != true ? false : !sablonySPRecords.All(i => sablonySelectedRecords.Contains(i)) ? null : sablonySPRecords.Any(i => sablonySelectedRecords.Contains(i)))"
Change="@(args => sablonySelectedRecords = args == true ? sablonySPRecords.ToList() : null)" />
</HeaderTemplate>
<Template Context="data">
<RadzenCheckBox TabIndex="-1" TriState="false" Value="@(sablonySelectedRecords != null && sablonySelectedRecords.Contains(data))" InputAttributes="@(new Dictionary<string,object>(){ { "aria-label", "Select item" }})"
TValue="bool" Change=@(args => { if(!allowRowSelectOnRowClick) { sablonySPGrid.SelectRow(data); }}) />
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn Title="Název šablony SP" Property="LlpName" Sortable=false Width="100px" />
<RadzenDataGridColumn Title="Typ SP" Property="LlpTypschvalovacihoprocesu" Sortable=false Width="100px" />
<RadzenDataGridColumn Title="Vytvořil" Property="CreatedBy" Sortable=false Width="70px" />
<RadzenDataGridColumn Title="Vytvořeno" Property="CreatedOn" Sortable=false Width="70px" />
</Columns>
</RadzenDataGrid>
</RadzenCard>
And the code is here:
RadzenDataGrid<LlpSablonaspBase> sablonySPGrid;
IEnumerable<LlpSablonaspBase> sablonySPRecords;
IList<LlpSablonaspBase> sablonySelectedRecords;
async Task LoadSablonySPData(LoadDataArgs args)
{
isLoading = true;
await Task.Yield();
var query = dataDeployerContext.LlpSablonaspBases
.Select(s => new LlpSablonaspBase()
{
LlpSablonaspId = s.LlpSablonaspId,
LlpName = s.LlpName,
CreatedBy = s.CreatedBy,
LlpTypschvalovacihoprocesu = s.LlpTypschvalovacihoprocesu,
CreatedOn = s.CreatedOn,
Statuscode = s.Statuscode
});
sablonySPCount = query.Count();
sablonySPRecords = query
.Skip(args.Skip.Value)
.Take(args.Top.Value)
.ToList();
isLoading = false;
}