I have a ComboBox/DropDownList that gets data from a remote service, using virtualization. When the PageSize property is big enough (in my case 20), I have issues scrolling up the selection box dropdown list. I'm trying to scroll but then resets to the currently selected item making it almost impossible to scroll up. You can use your own demo examples to replicate this issue.
To reproduce the issue, try the ComboBox - Virtualization, in Telerik REPL (Demo), change the PageSize from 10 to 20. Open the dropdown and select an item. Then, open again the dropdown and scroll slowly up.
I would like to change the text in the ComboBox dropdown when there is no data in the source collection.
At the moment the only option is through localization for all instances like here.
Transitioning our application from Telerik React to Blazor, our comboboxes in our React application are hooked up to OData endpoints because of the amount of data they could display, some as large as 30mb of json.
Server filtering, https://feedback.telerik.com/blazor/1447481-server-filtering-with-custom-data-request-event-that-can-accommodate-remote-data, almost works, however:
I tried setting up my combobox like my OData Grid, i.e.
<TelerikComboBox Data="@Dtos"
OnRead="@ReadItems"
Filterable="true"
Placeholder="Find what you seek by typing"
@bind-Value="@SelectedValue"
TextField="Name"
ValueField="Id"
Pageable="true"
PageSize="20"
TotalCount=@Dtos.Count
>
However it throws an exception:
blazor.webassembly.js:1 WASM: System.InvalidOperationException: Object of type 'Telerik.Blazor.Components.TelerikComboBox`2[[MyType, MyNamespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[System.Guid, mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]' does not have a property matching the name 'Pageable'.
Was hoping this would 'just work' like it does with the Grid, which is amazing!
ComboBox value binding broken in 2.9.0, works fine in 2.8.0
Please see your own documentation example:
<TelerikComboBox Data="@MyList" @bind-Value="MyItem">
</TelerikComboBox>
@code {
protected List<string> MyList = new List<string>() { "first", "second", "third" };
protected string MyItem { get; set; } = "second";
}
Hi Telerik Support.
I am using TelerikComboBox with Virtualization and enabled Filtering. If I filter for a text and then scroll down, the filter text gets cleared. I am using OnRead event to populate the combo box. But the same issue is seen with local data population in the below sample code.
https://demos.telerik.com/blazor-ui/combobox/virtualization
I need to show the user the text they have entered even when they scroll down to the next page. Is there a solution for this?
Regards
Bably
The popup window is not closed when the ComboBox is disabled from code.
Reproduction code:
Selected value: @selectedValue
<br />
<TelerikComboBox Data="@myComboData"
TextField="MyTextField"
ValueField="MyValueField"
Value="selectedValue"
ValueChanged="@((int value) => ValueChangedHandler(value))"
Placeholder="Select an item..."
ClearButton="true"
Enabled="@isEnabled"
Filterable="true">
</TelerikComboBox>
@code {
public bool isEnabled { get; set; } = true;
IEnumerable<MyDdlModel> myComboData = Enumerable.Range(1, 20).Select(x => new MyDdlModel { MyTextField = "item " + x, MyValueField = x });
int selectedValue { get; set; } = 3; //usually the current value should come from the model data
public async Task ValueChangedHandler(int value)
{
isEnabled = false;
await Task.Delay(4000); //simulate network delay
selectedValue = value;
isEnabled = true;
}
//in a real case, the model is usually in a separate file
//the model type and value field type must be provided to the dropdpownlist
public class MyDdlModel
{
public int MyValueField { get; set; }
public string MyTextField { get; set; }
}
}
When selecting an item with the Enter key, the value is not displayed in the input field.
ReproductionThe item is selected, but its value is not displayed inside the input field.
===
The issue is also reproducible with the MultiColumnComboBox component.
In my data, I have multiple identical values for the TextField of the ComboBox. When the user selects one of them and focuses away from the component the selected value changes to the first instance of the items with the same TextFields, although they have different ValueFields.
Reproduction:
<TelerikComboBox Data="@myDdlData"
TextField="MyTextField"
ValueField="MyValueField"
Value="selectedValue"
ValueChanged="@((int? id) => ValueChangedHandler(id))"
FilterOperator="StringFilterOperator.Contains"
Filterable="true">
</TelerikComboBox>
@code {
private List<MyDdlModel> myDdlData { get; set; }
private void ValueChangedHandler(int? id)
{
selectedValue = id;
}
public class MyDdlModel
{
public int? MyValueField { get; set; }
public string MyTextField { get; set; }
}
int? selectedValue { get; set; }
protected override void OnInitialized()
{
myDdlData = new List<MyDdlModel>()
{
new MyDdlModel()
{
MyValueField = 1,
MyTextField = "John Smith"
},
new MyDdlModel()
{
MyValueField = 2,
MyTextField = "John Smith"
},
new MyDdlModel()
{
MyValueField = 3,
MyTextField = "John Smith"
},
new MyDdlModel()
{
MyValueField = 4,
MyTextField = "Alice Jones"
},
new MyDdlModel()
{
MyValueField = 5,
MyTextField = "Alice Jones"
},
};
}
}
When the height of the popup is set to 'auto' and it opens upwards, the resizing process causes it to be incorrectly positioned.
# Reproduction:
1. Open this REPL - https://blazorrepl.telerik.com/mHuoPRFk52ienlUt52
2. Shrink the browser so that the ComboBox remains at the bottom of the window:
3. Type "item 2" in the ComboBox
Replication code:
@SelectedValue
<br />
<TelerikComboBox Data="@DdoData"
OnRead="@OnReadHandler"
Filterable="true"
ValueField="RecId"
TextField="DdoTitle"
Placeholder="Find what you seek by typing"
@bind-Value="@SelectedValue">
</TelerikComboBox>
@code{
public int SelectedValue { get; set; } = 4;
List<ddo> DdoData { get; set; }
public string ddoCbType { get; set; } = "Default";
int InitialId { get; set; }
string currentText { get; set; } = "";
protected override async Task OnInitializedAsync()
{
await ReadDdoData(ddoCbType, "");
if (SelectedValue > 0)
{
InitialId = (int)SelectedValue;
await ReadDdoData(ddoCbType, currentText);
}
}
async Task OnReadHandler(ComboBoxReadEventArgs args)
{
if (args.Request.Filters.Count > 0)
{
Telerik.DataSource.FilterDescriptor filter = args.Request.Filters[0] as Telerik.DataSource.FilterDescriptor;
currentText = filter.Value.ToString();
await ReadDdoData(ddoCbType, currentText);
}
else
{
currentText = "";
await ReadDdoData(ddoCbType, "");
}
}
private async Task ReadDdoData(string ddoCbType, string currentText)
{
await Task.Delay(100);
DdoData = new List<ddo>()
{
new ddo(){ RecId = 1, DdoTitle = "one"},
new ddo(){ RecId = 2, DdoTitle = "two"},
new ddo(){ RecId = 3, DdoTitle = "Three"},
new ddo(){ RecId = 4, DdoTitle = "Four"},
new ddo(){ RecId = 5, DdoTitle = "Five"}
};
//this does not help
await InvokeAsync(StateHasChanged);
}
public class ddo
{
public int RecId { get; set; }
public string DdoTitle { get; set; }
}
}
Hi,
If I enter some characters in the ComboBox to filter it, the characters that I enter aren't shown and the filtering is not correct. Indeed, if I enter "ALU" (some of my data start with "ALU", no data appears.
A ComboBox is databound via OnRead. It has an initial value, but no data arrives after the first OnRead call. We call Rebind() to fetch data and then it populates, but the component value doesn't show.
Click the button. The ComboBox should show its initial value, but doesn't. A similar scenario worked until version 2.30, when there was no Rebind(), but we set Data directly.
The workaround is to set raise a flag in OnRead and set the value in OnAfterRenderAsync.
@using Telerik.DataSource.Extensions
<TelerikButton OnClick="@BindCombo">Rebind Combo</TelerikButton>
<TelerikComboBox TItem="@ComboItem"
TValue="int"
@ref="@ComboRef"
TextField="Text"
ValueField="Id"
OnRead="OnComboRead"
Width="200px"
@bind-Value="@ComboValue">
</TelerikComboBox>
@code {
string FilterValue { get; set; } = "A";
int ComboValue { get; set; } = 2;
bool BindFlag { get; set; }
bool ShouldResetValue { get; set; }
IEnumerable<ComboItem> LegacyComboData { get; set; }
TelerikComboBox<ComboItem, int> ComboRef { get; set; }
void BindCombo()
{
BindFlag = true;
ComboRef.Rebind();
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (ShouldResetValue)
{
// comment out the initially set value above to make the following line work
ComboValue = 2;
StateHasChanged();
}
await base.OnAfterRenderAsync(firstRender);
}
async Task OnComboRead(ComboBoxReadEventArgs args)
{
if (BindFlag)
{
var service = new MyService();
var data = await service.GetComboItem(FilterValue);
var result = await data.ToDataSourceResultAsync(args.Request);
args.Data = result.Data;
//ShouldResetValue = true;
}
}
public class ComboItem
{
public int Id { get; set; }
public string Code { get; set; }
public string Text { get; set; }
}
public class MyService
{
public async Task<IEnumerable<ComboItem>> GetComboItem(string code)
{
await Task.Delay(300);
var data = new[]
{
new ComboItem{ Id = 1, Code = "A", Text = "ValueA1" },
new ComboItem{ Id = 2, Code = "A", Text = "ValueA2" },
new ComboItem{ Id = 3, Code = "A", Text = "ValueA3" },
new ComboItem{ Id = 4, Code = "B", Text = "ValueB4" },
new ComboItem{ Id = 5, Code = "B", Text = "ValueB5" },
new ComboItem{ Id = 6, Code = "B", Text = "ValueB6" },
new ComboItem{ Id = 7, Code = "C", Text = "ValueC7" },
new ComboItem{ Id = 8, Code = "C", Text = "ValueC8" },
new ComboItem{ Id = 9, Code = "C", Text = "ValueC9" },
};
return data.Where(x => x.Code == code).ToList();
}
}
}
Issue - Setting the selected element of a combo box inside a form worked in 2.22.0 and no longer works in 2.23.0
Repo - https://github.com/benhysell/BlazorGridPagingIssue
Steps to Reproduce
Details
This is a contrived example pulled out of a larger application. Almost all of our combo boxes are backed by OData calls. When we 'create or POST' an element the first time we load the form we have the combo box make an OData call to retrieve the top 200 elements. On a subsequent 'edit or PUT', where we have a thing we want to update we first go get the thing we want to work with, and then fill in the comobo box with that element.
In this example application we simulate this load by deciding if a value was passed in or not for the combo box. https://localhost:5001/updateWeather always passes in an 8 to load the 8th element. https://localhost:5001/createWeather does not pass in any value, leaving the form value unbound.
This all worked as expected in 2.22.0, however once we upgraded to 2.23.0 we could no longer set the value of the combo box on load when combined with an OData call.
When i search for something by typing in combobox, i want to be able to use the keyboard to make my selection
Exable below, if i press b, I want to be able to either select baseboll by pressing enter, or make another selection by using arrow keys and then enter.
The ComboBox will not display an initial selected item, if the value is equal to the type's default. Applies to integers, guids, etc.
This used to work until version 2.30.
Here is a REPL test page.
If the value type is nullable, a zero int value will work for initial item selection.
When I select an item from the combo box dropdown, the OnChange event fires with the new value, but the model field is not updated yet.
@selectedValue
<TelerikComboBox Data="@myDdlData" TextField="MyTextField" ValueField="MyValueField"
@bind-Value="@selectedValue" OnChange="@MyOnChangeHandler">
</TelerikComboBox>
@code {
int selectedValue { get; set; }
IEnumerable<MyDdlModel> myDdlData = Enumerable.Range(1, 20).Select(x => new MyDdlModel { MyTextField = "item " + x, MyValueField = x });
private void MyOnChangeHandler(object theUserInput)
{
Console.WriteLine($"COMBO: the models is now {selectedValue} and the handler received {theUserInput}");
}
public class MyDdlModel
{
public int MyValueField { get; set; }
public string MyTextField { get; set; }
}
}