[Solved] Grid Batch editing DropDown does not render when Custom Filter is defined

1 Answer 11 Views
Grid
Sean
Top achievements
Rank 1
Iron
Iron
Sean asked on 07 Apr 2026, 01:31 PM

The issue I am having is when using Batch editing with the following conditions the field that I am attempting to update(using a dropdown list/component) does not render (see attachment) as a dropdown list.

  • Grid component with field that is an object
  • Column configured as Client Template
  • Field that is bound has the UHint attribute  set to an Editor template
  • A custom filter is set

 

ex: The code below shows a custom filter. When this custom filter is set then this dropdown field DOES NOT render as dropdown. If I remove the the custom filter the drop down renders properly when batch editing.

 


        columns.Bound(p => p.SubProgramObject.SubProgram).ClientTemplate("#=sanitizeNulls(SubProgramObject?.SubProgram)#").Sortable(true).Width(160).Title("Sub Program").Filterable(filterable => filterable
        .UI("subProgramFilter").Extra(false)
        .Operators(operators => operators
        .ForString(str => str.Clear()
            .IsEqualTo("Is equal to")
            .IsNotEqualTo("Is not equal to")
            .IsNullOrEmpty("Is null")
            .IsNotNullOrEmpty("Is not null")
        )));

 

Note: If I do NOT configure a custom filter the dropdown renders as expected. See PDF attached

1 Answer, 1 is accepted

Sort by
0
Eyup
Telerik team
answered on 10 Apr 2026, 01:12 PM

Hello Sean,

 

Thank you for reaching out.

When you bind to the nested property SubProgramObject.SubProgram (a primitive string), the Grid's batch editing engine resolves the editor based on that leaf property's type (string), not the parent complex object. This means the [UIHint] attribute on SubProgramObject (which points to your dropdown editor template) is never picked up - the grid renders a plain text input instead.

Adding the custom filter isn't the actual cause - it's that you changed the binding expression to the nested property to make the filter operators (.ForString(...)) work. Without the deep binding, the filter was bound to the complex object and the editor template resolved correctly.

To resolve this issue, try to bind the column to the complex object (SubProgramObject) and configure the custom filter using the DataSource filter or a JavaScript-based approach instead:

columns.Bound(p => p.SubProgramObject)
    .ClientTemplate("#=sanitizeNulls(SubProgramObject?.SubProgram)#")
    .Sortable(true)
    .Width(160)
    .Title("Sub Program")
    .Filterable(filterable => filterable
        .UI("subProgramFilter")
        .Extra(false)
        .Operators(operators => operators
            .ForString(str => str.Clear()
                .IsEqualTo("Is equal to")
                .IsNotEqualTo("Is not equal to")
                .IsNullOrEmpty("Is null")
                .IsNotNullOrEmpty("Is not null")
            ))
    );
Then, in your custom filter JavaScript function subProgramFilter, ensure the filter targets the nested field:
function subProgramFilter(element) {
    element.kendoDropDownList({
        dataSource: subProgramDataSource, // your data source for sub programs
        dataTextField: "SubProgram",
        dataValueField: "SubProgram",
        optionLabel: "Select Sub Program ...",
        // This ensures the filter sends the value against the correct field
        change: function () {
            // Custom handling if needed
        }
    });
}
Alternatively, you can explicitly specify the editor template so the grid doesn't infer it from the property type:
columns.Bound(p => p.SubProgramObject.SubProgram)
    .EditorTemplateName("SubProgramEditor") // name of your EditorTemplate .cshtml
    .ClientTemplate("#=sanitizeNulls(SubProgramObject?.SubProgram)#")
    .Sortable(true)
    .Width(160)
    .Title("Sub Program")
    .Filterable(filterable => filterable
        .UI("subProgramFilter").Extra(false)
        .Operators(operators => operators
            .ForString(str => str.Clear()
                .IsEqualTo("Is equal to")
                .IsNotEqualTo("Is not equal to")
                .IsNullOrEmpty("Is null")
                .IsNotNullOrEmpty("Is not null")
            ))
    );
This explicitly tells the Grid to use your dropdown editor template regardless of the bound property type, restoring the dropdown in batch edit mode while keeping the custom string filter functional.

Let me know if you find these directions helpful.

 

Regards,
Eyup
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.

Tags
Grid
Asked by
Sean
Top achievements
Rank 1
Iron
Iron
Answers by
Eyup
Telerik team
Share this question
or