Completed
Last Updated: 19 May 2020 16:15 by ADMIN
Release 2.14.0
Kostas
Created on: 14 May 2020 16:18
Category: UI for Blazor
Type: Bug Report
2
Bug with grid EditorTemplate

Based on the example used in this page (https://docs.telerik.com/blazor-ui/components/grid/editing/incell)

i tried to use a component of my own composed by teleriks components in the editor template

 


@page "/fetchdata"
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@inject IAccessTokenProvider AuthenticationService
@inject NavigationManager Navigation
@inject WeatherForecastDataSource WeatherForecastDataSource
@using Olympus.Artemis.Shared
@attribute [Authorize]

<h1>Weather forecast</h1>

<p>This component demonstrates fetching data from the server.</p>


<table class="table">
    <thead>
        <tr>
            <th>Date</th>
            <th>Temp. (C)</th>
            <th>Temp. (F)</th>
            <th>Summary</th>
        </tr>
    </thead>
    <tbody>
        <TelerikGrid Data="_data" Height="400px"  
                     Pageable="true" Sortable="true" Groupable="true" EditMode="@GridEditMode.Incell" Navigable="true"
                     FilterMode="Telerik.Blazor.GridFilterMode.FilterRow" @ref="_grid"
                     Resizable="true" Reorderable="true">
            <GridColumns>
                <GridColumn Field=@nameof(TestItem.WeatherForecastID) Title="Position" Width="200px">
                    <Template Context="item">
                        @{

                            var value = ((TestItem)item).WeatherForecastID;
                            var text = data.Where(x => x.ID == value).Select(x => x.Date).FirstOrDefault();

                        }
                        @text
                    </Template>
                    <EditorTemplate>
                        @{
                            currentItem = context as TestItem;
                            <Test2 OnChange="@onChange" DataSource="@this.WeatherForecastDataSource" Value="@currentItem.WeatherForecastID"></Test2>
 
                        }
                    </EditorTemplate>
                </GridColumn>
            </GridColumns>
        </TelerikGrid>


       
    </tbody>

</table>


@code {   
    protected async Task onChange(object o) {
        currentItem.WeatherForecastID =(Guid) o;
        Console.WriteLine("wrwerwe"+currentItem.WeatherForecastID);
        await CloseEditor(currentItem);
    }
    protected async override Task OnParametersSetAsync()
    {
        data =await WeatherForecastDataSource.GetDataAsync();

        await base.OnParametersSetAsync();
    }
    public List<WeatherForecast> data = new List<WeatherForecast>();
    public TestItem currentItem { get; set; }
    TelerikGrid<TestItem> _grid;
    DateTime selectedValue { get; set; } = DateTime.Now;
    private List<TestItem> _data = new List<TestItem>()
    {
            new TestItem { MyDate = DateTime.Today, DateName = "Σημερα" ,WeatherForecastID= new Guid("be4f3a98-5fd3-4972-bc49-1c442cdf87dd") ,ID=Guid.NewGuid()},
            new TestItem { MyDate =DateTime.Today.AddDays(1), DateName = "Αύριο",WeatherForecastID=new Guid("7fac0c25-653b-4606-afef-19f6e27fc57a"),ID=Guid.NewGuid() },
            new TestItem { MyDate =DateTime.Today.AddDays(2), DateName = "Μεθαύριο" ,WeatherForecastID= new Guid("48eb0a12-5971-479a-852d-6383f30e14cb"),ID=Guid.NewGuid()},
            new TestItem { MyDate =DateTime.Today.AddDays(3), DateName = "Αντιμεθαύριο" ,WeatherForecastID= new Guid("113bde91-b0b9-45e0-9d4b-5b280650e042"),ID=Guid.NewGuid()}
    };


    public class TestItem:Olympus.Artemis.Shared.InfoEntities.BaseInfo {
        public Guid WeatherForecastID { get; set; }
        public DateTime MyDate { get; set; }
        public string DateName { get; set; }
        public override bool Equals(object obj)
        {
            if (obj != null && obj is TestItem)
            {
                TestItem curr = obj as TestItem;
                return (ID == curr.ID) && (WeatherForecastID == curr.WeatherForecastID) && (MyDate == curr.MyDate) && (DateName == curr.DateName);
            }
            return false;
        }
    }
    public async Task CloseEditor(TestItem currentItem)
    {
        var state = _grid?.GetState();

        if (currentItem.ID == null && state.InsertedItem != null)
        {
            // insert operation - the item is new
            await CreateHandler(new GridCommandEventArgs()
            {
                Item = state.InsertedItem
            });
        }
        else
        if (currentItem.ID != null && state.EditItem != null)
        {
            Console.WriteLine($"field c {state.EditField}  {typeof(TestItem).GetProperty(state.EditField).GetValue(currentItem)}");
            Console.WriteLine($"field e {state.EditField}  {typeof(TestItem).GetProperty(state.EditField).GetValue(state.EditItem)}");

            // edit operation on an existing item
            await UpdateHandler(new GridCommandEventArgs()
            {
                Item = state.EditItem,
                Field = state.EditField
            });
        }

        state.InsertedItem = state.OriginalEditItem = state.EditItem = default;
        StateHasChanged();
        await Task.Delay(200); // let the grid re-render and close the cell if keyboard navigation is enabled

        await _grid?.SetState(state);
    }
    async Task UpdateHandler(GridCommandEventArgs args)
    {

        string fieldName = args.Field;
        object newVal = args.Value; // you can cast this, if necessary, according to your model
        Console.WriteLine(fieldName);

        TestItem item = (TestItem)args.Item; // you can also use the entire model
        Console.WriteLine(item.ID);

        // perform actual data source operation here through your service

        // if the grid Data is not tied to the service, you may need to update the local view data too
        var index = _data.FindIndex(i => i.ID == item.ID);
        if (index != -1)
        {
            if (!_data[index].Equals(item))
            {
                _data[index] = item;
                Console.WriteLine("Update event is fired for " + args.Field + typeof(TestItem).GetProperty(args.Field).GetValue(item));
                // this copies the entire item, consider altering only the needed field
            }
        }

    }
    async Task CreateHandler(GridCommandEventArgs args)
    {
        TestItem item = (TestItem)args.Item;

        item.ID = Guid.NewGuid();
        _data.Insert(0, item);

        Console.WriteLine("create");
        // perform actual data source operation here through your service
    }


}

 

The test2 component created by me is this one It only includes a telerikdropdown

@using Olympus.Artemis.Shared
<TelerikComboBox Data="@Items" Value="@Value" ValueField="ID" OnChange="@OnChange" TextField="Date">

</TelerikComboBox>
@code {


    [Parameter]
    public EventCallback<Object> OnChange { get; set; }

 

    [Parameter]
    public Guid Value { get; set; }

    [Parameter]

    public DataSource<WeatherForecast> DataSource { get; set; }

    private IEnumerable<WeatherForecast> Items { get; set; } = new List<WeatherForecast>();
    protected async override Task OnInitializedAsync()
    {
        Items = await DataSource.GetDataAsync();

        await base.OnInitializedAsync();
    }


}

But when i try to select something from the dropdown list the grid cel does not close gracefully 

I get this error (the problem is when it executed the line   await _grid?.SetState(state);)

 

blazor.webassembly.js:1 crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1       Unhandled exception rendering component: Unknown edit type: 0
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1       Error: Unknown edit type: 0
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at e.applyEdits (https://localhost:44310/_framework/blazor.webassembly.js:1:15000)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at e.updateComponent (https://localhost:44310/_framework/blazor.webassembly.js:1:12872)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at Object.t.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:1704)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at Object.window.Blazor._internal.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:34679)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at _mono_wasm_invoke_js_unmarshalled (https://localhost:44310/_framework/wasm/dotnet.3.2.0-preview5.20216.1.js:1:166495)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at wasm_invoke_iiiiii (wasm-function[3166]:0x9d336)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at icall_trampoline_dispatch (wasm-function[5782]:0x1006fa)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at mono_wasm_interp_to_native_trampoline (wasm-function[4612]:0xcc80e)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at ves_pinvoke_method (wasm-function[3215]:0x9ed39)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at interp_exec_method (wasm-function[1126]:0x25a67)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 Microsoft.JSInterop.JSException: Unknown edit type: 0
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 Error: Unknown edit type: 0
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at e.applyEdits (https://localhost:44310/_framework/blazor.webassembly.js:1:15000)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at e.updateComponent (https://localhost:44310/_framework/blazor.webassembly.js:1:12872)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at Object.t.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:1704)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at Object.window.Blazor._internal.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:34679)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at _mono_wasm_invoke_js_unmarshalled (https://localhost:44310/_framework/wasm/dotnet.3.2.0-preview5.20216.1.js:1:166495)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at wasm_invoke_iiiiii (wasm-function[3166]:0x9d336)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at icall_trampoline_dispatch (wasm-function[5782]:0x1006fa)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at mono_wasm_interp_to_native_trampoline (wasm-function[4612]:0xcc80e)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at ves_pinvoke_method (wasm-function[3215]:0x9ed39)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at interp_exec_method (wasm-function[1126]:0x25a67)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.JSInterop.WebAssembly.WebAssemblyJSRuntime.InvokeUnmarshalled[T0,T1,T2,TResult] (System.String identifier, T0 arg0, T1 arg1, T2 arg2) <0x3038030 + 0x00046> in <filename unknown>:0 
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.JSInterop.WebAssembly.WebAssemblyJSRuntime.InvokeUnmarshalled[T0,T1,TResult] (System.String identifier, T0 arg0, T1 arg1) <0x3037f50 + 0x00014> in <filename unknown>:0 
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer.UpdateDisplayAsync (Microsoft.AspNetCore.Components.RenderTree.RenderBatch& batch) <0x3037e58 + 0x0001e> in <filename unknown>:0 
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue () <0x2de1a68 + 0x000f2> in <filename unknown>:0 
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1       Unhandled exception rendering component: Cannot read property 'parentNode' of undefined
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1       TypeError: Cannot read property 'parentNode' of undefined
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at Object.e [as removeLogicalChild] (https://localhost:44310/_framework/blazor.webassembly.js:1:6927)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at e.applyEdits (https://localhost:44310/_framework/blazor.webassembly.js:1:13641)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at e.updateComponent (https://localhost:44310/_framework/blazor.webassembly.js:1:12872)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at Object.t.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:1704)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at Object.window.Blazor._internal.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:34679)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at _mono_wasm_invoke_js_unmarshalled (https://localhost:44310/_framework/wasm/dotnet.3.2.0-preview5.20216.1.js:1:166495)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at wasm_invoke_iiiiii (wasm-function[3166]:0x9d336)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at icall_trampoline_dispatch (wasm-function[5782]:0x1006fa)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at mono_wasm_interp_to_native_trampoline (wasm-function[4612]:0xcc80e)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at ves_pinvoke_method (wasm-function[3215]:0x9ed39)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 Microsoft.JSInterop.JSException: Cannot read property 'parentNode' of undefined
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 TypeError: Cannot read property 'parentNode' of undefined
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at Object.e [as removeLogicalChild] (https://localhost:44310/_framework/blazor.webassembly.js:1:6927)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at e.applyEdits (https://localhost:44310/_framework/blazor.webassembly.js:1:13641)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at e.updateComponent (https://localhost:44310/_framework/blazor.webassembly.js:1:12872)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at Object.t.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:1704)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at Object.window.Blazor._internal.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:34679)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at _mono_wasm_invoke_js_unmarshalled (https://localhost:44310/_framework/wasm/dotnet.3.2.0-preview5.20216.1.js:1:166495)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at wasm_invoke_iiiiii (wasm-function[3166]:0x9d336)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at icall_trampoline_dispatch (wasm-function[5782]:0x1006fa)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at mono_wasm_interp_to_native_trampoline (wasm-function[4612]:0xcc80e)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at ves_pinvoke_method (wasm-function[3215]:0x9ed39)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.JSInterop.WebAssembly.WebAssemblyJSRuntime.InvokeUnmarshalled[T0,T1,T2,TResult] (System.String identifier, T0 arg0, T1 arg1, T2 arg2) <0x3038030 + 0x00046> in <filename unknown>:0 
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.JSInterop.WebAssembly.WebAssemblyJSRuntime.InvokeUnmarshalled[T0,T1,TResult] (System.String identifier, T0 arg0, T1 arg1) <0x3037f50 + 0x00014> in <filename unknown>:0 
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer.UpdateDisplayAsync (Microsoft.AspNetCore.Components.RenderTree.RenderBatch& batch) <0x3037e58 + 0x0001e> in <filename unknown>:0 
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue () <0x2de1a68 + 0x000f2> in <filename unknown>:0 
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1       Unhandled exception rendering component: No element is currently associated with component 96
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1       Error: No element is currently associated with component 96
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at e.updateComponent (https://localhost:44310/_framework/blazor.webassembly.js:1:12336)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at Object.t.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:1704)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at Object.window.Blazor._internal.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:34679)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at _mono_wasm_invoke_js_unmarshalled (https://localhost:44310/_framework/wasm/dotnet.3.2.0-preview5.20216.1.js:1:166495)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at wasm_invoke_iiiiii (wasm-function[3166]:0x9d336)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at icall_trampoline_dispatch (wasm-function[5782]:0x1006fa)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at mono_wasm_interp_to_native_trampoline (wasm-function[4612]:0xcc80e)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at ves_pinvoke_method (wasm-function[3215]:0x9ed39)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at interp_exec_method (wasm-function[1126]:0x25a67)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1           at interp_runtime_invoke (wasm-function[5660]:0xf937a)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 Microsoft.JSInterop.JSException: No element is currently associated with component 96
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 Error: No element is currently associated with component 96
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at e.updateComponent (https://localhost:44310/_framework/blazor.webassembly.js:1:12336)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at Object.t.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:1704)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at Object.window.Blazor._internal.renderBatch (https://localhost:44310/_framework/blazor.webassembly.js:1:34679)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at _mono_wasm_invoke_js_unmarshalled (https://localhost:44310/_framework/wasm/dotnet.3.2.0-preview5.20216.1.js:1:166495)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at wasm_invoke_iiiiii (wasm-function[3166]:0x9d336)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at icall_trampoline_dispatch (wasm-function[5782]:0x1006fa)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at mono_wasm_interp_to_native_trampoline (wasm-function[4612]:0xcc80e)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at ves_pinvoke_method (wasm-function[3215]:0x9ed39)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at interp_exec_method (wasm-function[1126]:0x25a67)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1     at interp_runtime_invoke (wasm-function[5660]:0xf937a)
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.JSInterop.WebAssembly.WebAssemblyJSRuntime.InvokeUnmarshalled[T0,T1,T2,TResult] (System.String identifier, T0 arg0, T1 arg1, T2 arg2) <0x3038030 + 0x00046> in <filename unknown>:0 
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.JSInterop.WebAssembly.WebAssemblyJSRuntime.InvokeUnmarshalled[T0,T1,TResult] (System.String identifier, T0 arg0, T1 arg1) <0x3037f50 + 0x00014> in <filename unknown>:0 
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer.UpdateDisplayAsync (Microsoft.AspNetCore.Components.RenderTree.RenderBatch& batch) <0x3037e58 + 0x0001e> in <filename unknown>:0 
p.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue () <0x2de1a68 + 0x000f2> in <filename unknown>:0 

 

The test control is a simplified version of a more complex control i was trying to create (mutlicolumn combobox)

If I instead use the telerikdropdown in editortemplate everything works ok

 

 
1 comment
ADMIN
Marin Bratanov
Posted on: 15 May 2020 12:30

Thank you for reaching out, Kostas.

This issue stems from a bug in the framework related to focusout handlers on elements that disappear from the DOM. We are working on circumventing that in a couple of places at the moment. I've added this to the list and you can click the Follow button on this page to get status update notifications.

 

Regards,
Marin Bratanov
Progress Telerik

Progress is here for your business, like always. Read more about the measures we are taking to ensure business continuity and help fight the COVID-19 pandemic.
Our thoughts here at Progress are with those affected by the outbreak.