Unplanned
Last Updated: 12 Feb 2025 14:56 by Steven
Created by: Steven
Comments: 0
Category: UI for Blazor
Type: Feature Request
2

Add support for DateOnly and TimeOnly properties to the ToODataString() method in the DataSourceExtensions namespace.

===

TELERIK NOTE

@Steven I forked this thread from the already complete feature request Provide support for DateOnly and TimeOnly structs for the respective pickers

Currently DateOnly and TimeOnly types are not supported by the ToODataString() method. As a result, they are serialized with the default ToString() method. Please use DateTime instead or implement a custom serialization method. Downloading our source code and using the built-in method as a base is also an option.

===

ORIGINAL POST

Would you have any updates regarding this support for early 2024?
 
My main issue regarding this at the moment is:
- My Backend returns DTOs with DateOnly properties.
- I wish to use these properties in a grid
- So far... So good... We can see the items etc... But then...
- We want to filter these properties...
- When we get the OData query... Our DateOnly is not in the correct ISO format... As there's no support for those in DataSourceExtensions.cs
 
I already tried solving this by creating my own GridColumn type, but I'm afraid there's nothing I can do about the OData serialization without just writing our own DataSourceExtensions... At which point we're just making it confusing for other developers needing to include this...

public class DateOnlyGridColumn : GridColumn
{
    private DateOnly? _filterValue;
    public DateOnly? FilterValue
    {
        get => _filterValue;
        set
        {
            if (_filterValue != value)
            {
                _filterValue = value;
                StateHasChanged();
            }
        }
    }

    public DateOnlyGridColumn()
    {
        DisplayFormat = "{0:dd/M/yyyy}";
        FilterMenuTemplate = FilterMenu;
        FilterMenuButtonsTemplate = FilterButtons;
    }

    private RenderFragment<FilterMenuTemplateContext> FilterMenu => (context) => (builder) =>
    {
        builder.OpenComponent<TelerikDatePicker<DateOnly?>>(0);
        builder.AddAttribute(0, "Value", FilterValue);
        builder.AddAttribute(2, "ValueChanged", EventCallback.Factory.Create<DateOnly?>(this, (value) => FilterValue = value));
        builder.CloseComponent();
    };

    private RenderFragment<FilterMenuTemplateContext> FilterButtons => (context) => (builder) =>
    {
        // Filter button
        builder.OpenComponent<TelerikButton>(0);
        builder.AddAttribute(1, "OnClick", EventCallback.Factory.Create<MouseEventArgs>(this, async () => await ApplyFilter(context)));
        builder.AddAttribute(2, "ThemeColor", ThemeConstants.Button.ThemeColor.Primary);
        builder.AddAttribute(3, "ChildContent", (RenderFragment)(childBuilder =>
            childBuilder.AddContent(0, "Filter")));
        builder.CloseComponent();

        // Clear button
        builder.OpenComponent<TelerikButton>(4);
        builder.AddAttribute(5, "OnClick", EventCallback.Factory.Create<MouseEventArgs>(this, async () =>
        {
            FilterValue = null;
            await context.ClearFilterAsync();
        }));
        builder.AddAttribute(6, "ChildContent", (RenderFragment)(childBuilder =>
            childBuilder.AddContent(0, "Clear")));
        builder.CloseComponent();
    };

    private async Task ApplyFilter(FilterMenuTemplateContext filterContext)
    {
        if (filterContext == null || string.IsNullOrEmpty(Field) || !FilterValue.HasValue)
            return;

        var filter = new FilterDescriptor
        {
            Member = Field,
            MemberType = typeof(DateOnly),
            Operator = FilterOperator.IsEqualTo,
            Value = FilterValue.Value, //.ToString("o") Convert to ISO-8601 format
        };

        filterContext.FilterDescriptor.FilterDescriptors.Clear();
        filterContext.FilterDescriptor.FilterDescriptors.Add(filter);
        await filterContext.FilterAsync();
    }
}
Unplanned
Last Updated: 13 Jan 2025 17:11 by Xorcist
Created by: Xorcist
Comments: 0
Category: UI for Blazor
Type: Feature Request
2

When a user hits the ENTER key at the end of their typing and expects the full text to be submitted, they potentially have partial text being submitted (depending on how quickly ENTER is hit). We know the general accepted solution is to set the DebounceDelay to zero, but we are using two-way binding with state management that results in a very laggy/delayed experience while typing is this is done.

Please allow pressing Enter or blurring the input to short-circuit the debouncing.

===

ADMIN EDIT

===

This request applies to all inputs - NumericTextBox, TextBox, TextArea, etc.

Unplanned
Last Updated: 19 Dec 2024 11:56 by ADMIN

Hi Telerik Support

This is related to the feedback portal item:  The Grid header gets focus only for the first time when tabbing

I had raised the above issue, now I can see that the issue is fixed in 7.0.0. But the fix does not work when the TelerikGrid is inside a TelerikWindow. 

Please find the REPL sample https://blazorrepl.telerik.com/QIvmPrlI39rZ4whP10 

Is there a work around for the scenario where the grid is inside a popup window?

Regards

Bably

Unplanned
Last Updated: 29 Nov 2024 09:28 by ADMIN
Created by: Graham
Comments: 3
Category: UI for Blazor
Type: Feature Request
2

Hi,

Can I request that the Pdf Viewer:

- Load multiple pdf files on open. Maybe via an array of file names.

     - We use a different viewer due to this capability. For Human Resource files you need the ability to load numerous files into one viewer to show a complete
         document. The current one file option doesn't work for us.

- Display thumbnails of the loaded pages.
      - Thumbnail onclick to move to a specific page.

Regards,
Graham O'Riley

Unplanned
Last Updated: 25 Nov 2024 11:57 by ADMIN

Steps to reproduce:

  1. Insert a simple TelerikGrid on your page
  2. Add Columns with templates for each property
  3. Specify a Column Template

See https://blazorrepl.telerik.com/GyPvFMFr00zLEEdG00

Problem / Inconvenience

  • Context has to be converted/cast before access to the each property is possible
  • Grid columns are not generic which makes them hard to use sometimes
  • Fields have to be specified by name (may lead to wrong names after changing)

Solution / Feature Request

  • Provide new generic columns (to ensure no current implementations break)
  • Add [CascadingTypeParameter(nameof(TItem))] to the TelerikGrid
  • GridColumns automatically "inherit" the typeparam TItem

Idea from: Blazor QuickGrid

Benefits

  • GridColumns can be specified with Expression
  • Template context does not have to be cast anymore
  • Renaming properties affect expression or an error is display (property does not exist)
<GridColumn For="@(t => t.Name)">
        <Template>
                <div>
                    @item.Name
                </div>
        </Template>
</GridColumn>
Unplanned
Last Updated: 23 Oct 2024 13:46 by Nitesh

I get validation issues for the selection Checkboxes and the PageSizes dropdown as they do not have id or name attributes:

The behavior can be reproduced in the online demo: Blazor Data Grid - Overview

Unplanned
Last Updated: 03 Oct 2024 08:30 by Roberto

Please expose the current data of the data bound select components when using OnRead. This will spare the need to cache data for the second time in-memory, or make a database request, or search by non-ID value when the app needs to obtain the full data item(s) for given component value(s).

This feature request is applicable to:

  • AutoComplete
  • ComboBox
  • DropDownList
  • MultiColumnComboBox
  • MultiSelect

 

Unplanned
Last Updated: 31 Oct 2024 11:01 by ADMIN
Created by: Jesper
Comments: 6
Category: UI for Blazor
Type: Bug Report
6
I am using MS Playwright to create End2End tests. It worked fine when we used MudBlazor, but after we migrated to telerik I have run into a problem with the TelerikDropDownList.

It stops working if you open it too fast. It goes into a state where no matter what you do (Rebind/changing data bound values etc.), it will not open and show items.

It can be reproduced easily by calling .Open() in OnInitializedAsync()

I have reproduced it without MS Playwright in REPL, so you can easily debug it.

https://blazorrepl.telerik.com/QIOUYoPc57iQKy6702

If you uncomment the await Task.Delay(3000); the code will work.

Expected behavior:
It is ok that Open() does nothing while the control is initializing. It is not ok that just because you called Open() once, then you are forever stuck without being able to open it later, no matter how long you wait or what you do with the items.

I do not want to insert random Delays in my code either as I expect the TelerikDropDownList to not malfunction just because I open it too early.

I hope you can prioritize this as right now the DropDownList is not usable for us.
Unplanned
Last Updated: 06 Aug 2024 06:52 by ADMIN
The IsEntityFrameworkProvider method in the DataSource package returns false when the provider is Entity Framework Core. 
Unplanned
Last Updated: 08 May 2024 08:40 by ADMIN
Created by: Thomas
Comments: 0
Category: UI for Blazor
Type: Feature Request
4

Hello,

We use extensively the features of Telerik WPF RadMap and are now migrating to Blazor. So we are trying to use TelerikMap to cover our needs.

TelerikMap doesn't support WMS (most important) and vector tile (nice to have) layers.

Implementing them directly is not really important but having some class available for us to override to implement our way could be enough.

In Telerik WPF RadMap, we had TiledProvider and TiledMapSource from which we made our own implementations to cover our needs (WMS with specific parameters mostly), we override the method GetTile and from here we can do whatever we want.

It would be nice to have the same system in Blazor

Thanks

Thomas

Unplanned
Last Updated: 04 May 2024 16:19 by Cirrus
Created by: Cirrus
Comments: 3
Category: UI for Blazor
Type: Feature Request
1

On Blazor Filter, please consider option to drag and drop rules to re-order the rules. It's a common user request that when creating complex rules that user has ability to move rules around without having to delete and create again. User loses information and data when rules are deleted and can be difficult to relocate in long drop downs.

Ability to drag and drop move of existing rules would improve user experience. Any change to GUI should also reflect in updated FilterDescriptor.

===

ADMIN EDIT

===

The order of the filter rules in one group does not make a difference for the FilterDescriptor. Thus, the current request applies to dragging filter rules from one group to another.

Unplanned
Last Updated: 22 Apr 2024 07:56 by ADMIN
Created by: Cirrus
Comments: 1
Category: UI for Blazor
Type: Feature Request
1

On Blazor filter field parameters, please consider adding

1/ Group options, eg using demo sample fields drop down looks like this

Id
Quantity
Freight
Country
Ship to
Ship Address

but it would be useful to allow groping fields by common categories?

Group-1
-Id
-Quantity
-Freight
Group-2
-Country
-Ship to
-Ship Address

2/ Related, can you also add sort index for group and fields so they can be sorted by index rather than field name. Sometimes groups and fields require different order that is not always alphanumerical and may change order based on other selections.

3/ Maybe consider feature parity with filter field options here querybuilder

Unplanned
Last Updated: 12 Apr 2024 10:37 by Ehsan
Created by: Ehsan
Comments: 0
Category: UI for Blazor
Type: Feature Request
4
Add support for the Hijri (Islamic) calendar for all date components (DateInput, DatePicker, DateTimePicker, DateRangePicker, Calendar). 
Unplanned
Last Updated: 07 Mar 2024 08:56 by ADMIN

Sometimes the Gantt provides better visibility when we can split tasks into segments on the same row. This is a new feature to SyncFusion and would be very useful to extend the possibilities of the Telerik Gantt as well.

This is an example of what it looks like:

I could make use of this in a couple of ways. Some of my tasks require to get to a preliminary point at a certain time and a finished point later. Those are not continuous buckets of work, but they are so closely related that it would make visual presentation more intuitive and simpler if they were displayable that way.

I might also use this as a method of displaying a higher level read-only gantt where I want to condense a few milestones or task windows into a single row.

Unplanned
Last Updated: 08 Mar 2024 00:45 by alex
Created by: alex
Comments: 2
Category: UI for Blazor
Type: Feature Request
0

Sometimes we need custom filter logic. 

The advised approach currently is to use the OnRead event and have to manage the fetching of data manually  https://docs.telerik.com/blazor-ui/components/grid/manual-operations

If we could set a column to use a filter function  that has Func<GridDataType, Bool>? then we could apply this complex filter without having to repeatedly query the database and apply filters server side. 

For example, if I wanted to filter a column that related to an object that had a property that was a Collection<T> I could check the values of this collection against a filter UI I have made somewhere in the grid or outside of it. Then when the columns filterdescriptior was reviewed it would check my Func which returned True if any of the Rows Collection<T> matched my custom filter UI options.

Example use case that this feature would allow; 

 
Unplanned
Last Updated: 13 Nov 2024 12:03 by ADMIN
Created by: Nathan
Comments: 3
Category: UI for Blazor
Type: Feature Request
12
I'd like to be able to change the built-in icons that the components use. I currently can do that with custom solutions but I need an option to easily change all icons on a global app level (e.g. all save icons, all arrow-down icons, etc.). I have a custom icon set and I want to ensure consistency in the icons used throughout the app.
Unplanned
Last Updated: 30 Jul 2024 15:06 by Bram

This public feature request:

  • Explains how the TelerikRootComponent works.
  • Outlines the problems of the current software design in static .NET 8 Blazor apps.
  • Measures customer demand for a major change that may possibly resolve the current limitations.

How the TelerikRootComponent Works

Historically, the TelerikRootComponent was designed with the following purposes:

  • To host and render all Telerik Blazor popups as RenderFragments. This means that all popups are rendered where the TelerikRootComponent is defined in the application's component hierarchy. In most cases, correct popup position requires the TelerikRootComponent to wrap all the content on the web page. Otherwise the correct position is not guaranteed and this is documented. In addition, the TelerikRootComponent instance is a CascadingValue, which allows it to collect all popup RenderFragments.
  • The TelerikRootComponent exposes parameters for global application-wide Telerik settings, such as icon type or RTL support. This is another reason why it makes sense to have a single TelerikRootComponent that wraps all the page content.

Problems and Limitations in .NET 8 Blazor Static Apps

.NET 8 Blazor apps with "Per Component" interactivity location create a big challenge for the above state of affairs:

  • Cascading values do not pass across render mode boundaries. .NET 8 includes a new feature for passing cascading values to interactive components (builder.Services.AddCascadingValues()), but this mechanism does not support passing of RenderFragments, because they are not JSON serializable. This brings the requirement that the TelerikRootComponent is part of an interactive component hierarchy.
  • When the TelerikRootComponent is in a non-layout .razor file, it triggers more re-renders than normally. They are related to internal MediaQuery instances and all popups, which the root component manages.

So, developers who work with a globally static app with specific interactive components ("islands of interactivity") may need to:

  • Place the TelerikRootComponent somewhere inside the component hierarchy, so it can't wrap all the page content. This will lead to wrong popup position.
  • Use multiple TelerikRootComponents. This requires to define the same parameters for each TelerikRootComponent instance.

Next Steps

All developers who develop static .NET 8 Blazor apps with "Per Component" interactivity location:

  1. Please vote for this feature request, so that we can measure how many customers are affected by the described limitations.
  2. Post here and describe:
    • Why do you need to use apps with "Per Component" interactivity.
    • Your specific challenges with the current TelerikRootComponent setup.
Unplanned
Last Updated: 17 Jan 2024 07:23 by ADMIN
Created by: Ben
Comments: 6
Category: UI for Blazor
Type: Feature Request
1

Hi,

I am looking to use strongly-typed IDs in my project and it does not appear to be possible to achieve this with Telerik UI for Blazor. Instead, the popup does not go away on selection and the bound value does not update.

Note that this is not a request for binding to arbitrary complex types. I believe it would be sufficient to support value types that implement ToString / IParsable.

For example:

https://blazorrepl.telerik.com/QxvcQIPR55jFAGMF00

<h1>Hello, Telerik REPL for Blazor!</h1>
<h2>Selected Value: @SelectedValue</h2>

<TelerikDropDownList Data="@Data"
    @bind-Value="@SelectedValue"
    TextField="@nameof(SelectItem.DisplayName)"
    ValueField="@nameof(SelectItem.Value)"
    DefaultText="Select ...">
</TelerikDropDownList>

@code {
    public MyValue SelectedValue {get; set;}
    public SelectItem[] Data { get; } = new[] {
        new SelectItem(1),
        new SelectItem(2),
    };

    public readonly struct MyValue : System.IParsable<MyValue> {
        public int Value {get;}

        public MyValue(int value) {
            this.Value = value;
        }

        public override string ToString() {
            return Value.ToString();
        }

        public static MyValue Parse(string str, IFormatProvider provider) {
            return new(int.Parse(str, provider));
        }

        public static bool TryParse(string str, IFormatProvider provider, out MyValue value) {
            value = new(int.Parse(str, provider));
            return true;
        }
    }

    public class SelectItem {
        public SelectItem(int value) {
            Value = new(value);
            DisplayName = $"Item {value}";
        }

        public MyValue Value {get; set;}
        public string DisplayName {get; set;}
    }
}

Thanks,
Ben

Unplanned
Last Updated: 17 Nov 2023 14:30 by Steve
Created by: Steve
Comments: 0
Category: UI for Blazor
Type: Feature Request
2
I'd like to customize the list of filter operators for string fields and add another operator - "Does Not Start With".
Unplanned
Last Updated: 08 Nov 2023 06:09 by ADMIN
Created by: Dale
Comments: 0
Category: UI for Blazor
Type: Feature Request
2

Can we get the Infinite Calendar feature that is part of Kendo Angular components? This design is brilliant. It makes it so much easy to get to the date you want. specially went they span over months or years. It find it makes the date picker so much more useful. 

https://www.telerik.com/kendo-angular-ui/components/dateinputs/calendar/

1 2 3 4 5 6