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