Multiple components with allowvirtualization

Hello,
I have a blazor page with a radzen dropdown component with allowvirtualization attribute and a datagrid component with allowvirtualization also.
Does anyone know why the datagrid loaddata event does not fire?
If I comment dropdown component datagrid fires loaddata event and fill the component.

Thanks in advance

Check our forum FAQ on how to improve your question.

<RadzenTemplateForm class="form" TItem="Input" Data="@Inputs" Submit="@HandleValidSubmit" Context="context1">
        <RadzenDropDown class="form-control" Name="worker" AllowClear="@true" AllowFiltering="@true" Placeholder="Select"
                        AllowVirtualization="@true" LoadData="@LoadUserAsync" Count="@UserCount"
                        @bind-Value="@SelectedUser" Data="@Users" TextProperty="AllName"
                        FilterCaseSensitivity="@FilterCaseSensitivity.CaseInsensitive" />
....
....

    <RadzenDataGrid @ref="@GridReference" Data="@DevicesOutput" LoadData="@LoadDataAsync" TItem="DeviceSimpleOutput" AllowVirtualization="@true" AllowMultiColumnSorting="@true"
                    Count="@Count" Style="400px"
                    AllowFiltering="@false" AllowSorting="@true" IsLoading="@IsLoading" EditMode="DataGridEditMode.Multiple">
        <EmptyTemplate>
            <p style="color: lightgrey; font-size: 24px; text-align: center; margin: 2rem;">No records to display.</p>
        </EmptyTemplate>
        <Columns>
            <RadzenDataGridColumn TItem="DeviceSimpleOutput" Property="Name" Title="Name"></RadzenDataGridColumn>
            <RadzenDataGridColumn TItem="DeviceSimpleOutput" Title="Ip"></RadzenDataGridColumn>
        </Columns>
    </RadzenDataGrid>
.....

We can’t run this code to test it however this style it’s definitely not valid.

So sorry, was a typo error

 Style="height:400px"

The example is still valid correcting the error

I don’t see anything else suspicious and to comment further I will need runnable code demonstrating the problem.

I'll create a simple runnable code and post

You can use our demos, they are editable.

It seems to work in a new application, I'll check what can happen.

Sorry for wasting your time.

No, it fails.

When use async await to get data. The previous example i was not using async/await.

How can i show the code? Paste here?

And now it works again with async/await.

I'm going crazy

I have the same issue after 5.4.0 update, when i set data in DropDownDataGrid with enabled virtualisation i got this exception "The ParameterView instance can no longer be read because it has expired. ParameterView can only be read synchronously and must not be stored for later use.", but if disable virtualisation everything work correct.

I can't reproduce this error in the demo(

image

Without runnable code demonstrating the problem we cannot help.

I finaly did it)

Code:


<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Center" Gap="0.5rem" class="rz-p-12">
    <RadzenLabel Text="Select Value" Component="DropDownDataGridTextValueProperties" />
    <RadzenDropDownDataGrid @bind-Value=@customer Data=@customers TextProperty="@nameof(Customer.CompanyName)"
                            AllowVirtualization=true AllowFiltering=false PagerAlwaysVisible=false Name="DropDownDataGridTextValueProperties">
        <Columns>
            <RadzenDropDownDataGridColumn Property="CustomerID" Title="Customer ID" Width="60px" TextAlign="TextAlign.Center" />
            <RadzenDropDownDataGridColumn Property="CompanyName" Title="Company Name" Width="150px" />
        </Columns>
    </RadzenDropDownDataGrid>
    <RadzenButton Variant="Variant.Text" Click=@Refresh Icon="refresh" Size="ButtonSize.Small" />
</RadzenStack>

@code {
    Customer customer;
    List<Customer> customers = new();

    protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();
    }

    private void Refresh()
    {
        customers = new List<Customer>() 
        { 
            new Customer() { CustomerID = 1, CompanyName = "CompanyName1" },
            new Customer() { CustomerID = 2, CompanyName = "CompanyName2" },
            new Customer() { CustomerID = 3, CompanyName = "CompanyName3" }
        };
        customer = customers.First();
    }

    class Customer
    {
        public int CustomerID { get; set; }
        public string CompanyName { get; set; }
    }
}

Exception:

main point of this exception is
List<Customer> customers = new();
and
AllowVirtualization=true

Thanks! We will do our best to release fix for this tomorrow.

1 Like

Great!

Thank you and Vitaliy for testing.

Mike

I found the mistake, at least what I think it was since fixing it now is working.

In the dropdown, the object of Data (i mean Users in code behind) was initialized to an empty array and not nullable, in this way:

private IEnumerable<User> Users = [];

Then I changed to:

private IEnumerable<User>? Users;

I don't know the reason why, but at least it works.

It seems that we can't declare and initalize the variable at the same time. It doesn't matter it is a variable or a property.

I got this exception again:

  1. Click refresh button;
  2. Select second or third element in DropDownDataGrid;
  3. Click refresh button again.

Code:

<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Center" Gap="0.5rem" class="rz-p-12">
    <RadzenLabel Text="Select Value" Component="DropDownDataGridTextValueProperties" />
    <RadzenDropDownDataGrid @bind-Value=@customer Data=@customers TextProperty="@nameof(Customer.CompanyName)"
                            AllowVirtualization=true AllowFiltering=false PagerAlwaysVisible=false Name="DropDownDataGridTextValueProperties">
        <Columns>
            <RadzenDropDownDataGridColumn Property="CustomerID" Title="Customer ID" Width="60px" TextAlign="TextAlign.Center" />
            <RadzenDropDownDataGridColumn Property="CompanyName" Title="Company Name" Width="150px" />
        </Columns>
    </RadzenDropDownDataGrid>
    <RadzenButton Variant="Variant.Text" Click=@Refresh Icon="refresh" Size="ButtonSize.Small" />
</RadzenStack>

@code {
    Customer customer;
    List<Customer> customers = new();

    protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();
    }

    private void Refresh()
    {
        customers = new List<Customer>() 
        { 
            new Customer() { CustomerID = 1, CompanyName = "CompanyName1" },
            new Customer() { CustomerID = 2, CompanyName = "CompanyName2" },
            new Customer() { CustomerID = 3, CompanyName = "CompanyName3" }
        };
        customer = customers.First();
    }

    class Customer
    {
        public int CustomerID { get; set; }
        public string CompanyName { get; set; }
    }
}