Multi-selectable datagrid does not hold values

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;

        }

When you use LoadData you need to set KeyProperty similar to this demo:

1 Like

Thank you very much. It helped a lot. Now its working.