Unplanned
Last Updated: 15 May 2026 12:55 by ADMIN
Next
Created on: 23 Mar 2026 12:12
Category: ComboBox
Type: Bug Report
3
ComboBox Value does not display if virtual scrolling ValueMapper completes before render

If the ComboBox Value is set during initialization and the ValueMapper executes too fast and before the component has rendered, its Value doesn't show.

The problem also occurs in the MultiColumnComboBox.

Possible workarounds:

  • Set the component Value a bit later.
  • Delay the ValueMapper execution until OnAfterRenderAsync fires.
  • Rebind() the ComboBox in OnAfterRenderAsync. This will fire OnRead again.
  • Render the ComboBox conditionally in the first OnAfterRenderAsync call.

To reproduce:

@using Telerik.DataSource
@using Telerik.DataSource.Extensions

<p>ComboBox Value: @ComboBoxValue</p>

<TelerikComboBox ItemHeight="30"
                 OnRead="@OnComboBoxRead"
                 PageSize="20"
                 ScrollMode="@DropDownScrollMode.Virtual"
                 TItem="@ListItem"
                 TValue="@(int?)"
                 @bind-Value="@ComboBoxValue"
                 ValueMapper="@ComboBoxValueMapper"
                 Width="240px" />

@code {
    private List<ListItem>? ComboBoxData { get; set; }

    private int? ComboBoxValue { get; set; } = 3;

    private async Task OnComboBoxRead(ReadEventArgs args)
    {
        DataSourceResult result = await ComboBoxData.ToDataSourceResultAsync(args.Request);

        args.Data = result.Data;
        args.Total = result.Total;
    }

    private async Task<ListItem?> ComboBoxValueMapper(int? selectValue)
    {
        // Triggers the bug
        await Task.Yield();

        ListItem? result = ComboBoxData?.FirstOrDefault(x => selectValue == x.Value);

        return result;
    }

    protected override void OnInitialized()
    {
        ComboBoxData = Enumerable
            .Range(1, 1234)
            .Select(x => new ListItem()
                {
                    Value = x,
                    Text = $"Item {x}"
                })
            .ToList();
    }

    public class ListItem
    {
        public int Value { get; set; }
        public string Text { get; set; } = string.Empty;
    }
}

4 comments
ADMIN
Ivan Danchev
Posted on: 15 May 2026 12:55

Vitor,

Thank you for the explanation. 

This indeed sounds different than the original timing-related issue reported by Next. In order to avoid mixing them, I'd suggest creating a separate thread and providing:
* a detailed description of the scenario
* a comparison of the actual vs the expected behavior

It is also advisable to include a sample project, or a REPL example that demonstrates the scenario/issue, since it can be used as a reference point. 

The next release is coming out next week, but we can consider it for a subsequent release. 

Regards,
Ivan Danchev
Progress Telerik

Love the Telerik and Kendo UI products and believe more people should try them? Invite a fellow developer to become a Progress customer and each of you can get a $50 Amazon gift voucher.

Vitor
Posted on: 14 May 2026 15:21

Hi Ivan,

Thank you for your reply on my comment.
I can see you are using a read-only property to bring the nested property value to the top level class.

In a simple scenario, that can be used as a workaround, but think about a NoSQL database with hundreds of places where you have those nested owned type properties.

Also worth to mention that the TelerikGrid already offers the capability to map a column to a nested property using the property path like the below:

<GridColumn Title="Name" Field="Name.DisplayName"/>

Consistency across those different components is something expected I think;

and you already have the code necessary for that in your Telerik.Blazor.Extensions.ReflectionExtensions
The GetNestedPropertyValue method provides that capability.

If in the TelerikSelectBase.GetItemPropertyValue, instead of calling item?.GetPropertyValue(propertyName) you call item?.GetNestedPropertyValue(propertyName) you will achieve exactly what I'm proposing.

It's very simple change that will simplify usage of the combobox and make it more consistent across the entire library.
What do you think, can we make this small change for next release? :)

BR,
Vitor Linares

ADMIN
Ivan Danchev
Posted on: 14 May 2026 13:27

Vitor,

I tried to replicate the issue you've shown in the attached .gif, but wasn't able to do so. Here's a REPL example in which the ComboBox's  TextField uses a nested property: https://blazorrepl.telerik.com/GgYpPovd23SCSP2E16 

<TelerikComboBox ItemHeight="30"
                 OnRead="@OnComboBoxRead"
                 PageSize="20"
                 ScrollMode="@DropDownScrollMode.Virtual"
                 TItem="@ListItem"
                 TValue="@(int ?)"
                 @bind-Value="@ComboBoxValue"
                 ValueMapper="@ComboBoxValueMapper"
                 TextField="@nameof(ListItem.DisplayName)"
                 Width="240px" />
I don't observe any unusual behavior in the linked example.

Could you modify the example so that it exhibits the issue, generate a new REPL link with your changes and share it for further review? 

Regards,
Ivan Danchev
Progress Telerik

Love the Telerik and Kendo UI products and believe more people should try them? Invite a fellow developer to become a Progress customer and each of you can get a $50 Amazon gift voucher.

Vitor
Posted on: 07 May 2026 21:16
We are experiencing similar behaviour, but when TextField is set to a nested property e.g TextField = "Name.DisplayName";
However, that doesn't looks like it's related with any racing condition or ValueMapper, just by setting TextField to a nested property is enough to reproduce.
If the TextField is set to a top-level property in the model, the combobox behaves as expected.