Data grid master detail row update question

Hello there,

I have a master-detail grid, I am populating data OnInitializedAsync with only IsActive = 1 data. I am updating IsActive = 0 one of the order detail (_gridDetail) rows with PassiveDetail method. I expect the updated row to be disappeared from the list but it is still in there until I refresh the page.

Here is master-detail datagrid:

<RadzenButton Icon="add_circle_outline" style="margin-bottom: 10px" Text="Add New Order" Click="@InsertRow" Disabled="@(_orderToInsert != null)"/><RadzenButton Text="Export XLS" Icon="grid_on" Click="@(args => ExportExcel())" Class="mb-4 mr-2" />
<RadzenDataGrid @ref="_grid" AllowFiltering="true" AllowPaging="true" PageSize="7" AllowSorting="true" RowClick="RowClick" ExpandMode="DataGridExpandMode.Single"
                Data="@_orders" TItem="Order" EditMode="DataGridEditMode.Single" RowUpdate="@OnUpdateRow" RowCreate="@OnCreateRow" @bind-Value="@SelectedOrders"
                ShowExpandColumn="false" ShowPagingSummary="true" AllowColumnResize="true" >
    <Template Context="order">
        <RadzenCard Style="margin-bottom: 20px">
            Customer:
            <b>@order?.Customer?.Name</b>
        </RadzenCard>
        <RadzenTabs>
            <Tabs>
                <RadzenTabsItem Text="Order Details">
                    
                    <RadzenDataGrid @ref="_gridDetail" AllowFiltering="true" AllowPaging="true" PageSize="5" AllowSorting="true" Data="@order.OrderDetails" 
                    TItem="OrderDetail" EditMode="DataGridEditMode.Multiple" RowUpdate="@OnUpdateRowDetail" RowCreate="@OnCreateRowDetail" AllowColumnResize="true"
...
 <RadzenDataGridColumn TItem="OrderDetail" Context="orderDetail" Filterable="false" Sortable="false" TextAlign="TextAlign.Center" Width="200px" OrderIndex="20">
                                <Template Context="detail">
                                    <RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Primary" Class="m-1" Click="@(args => EditRowDetail(detail))" @onclick:stopPropagation="true">
                                    </RadzenButton>
                                </Template>
                                <EditTemplate Context="detail">
                                    <RadzenButton Icon="check" ButtonStyle="ButtonStyle.Primary" Class="m-1" Click="@(args => SaveRowDetail(detail))">
                                    </RadzenButton>
                                    <RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Class="m-1" Click="@(args => CancelEditDetail(detail))">
                                    </RadzenButton>
                                    <RadzenButton Icon="delete" ButtonStyle="ButtonStyle.Danger" Class="m-1" Click="@(args => PassiveDetail(detail))">
                                    </RadzenButton>
                                </EditTemplate>
                            </RadzenDataGridColumn>

Here is the OnInitializedAsync:

IList<Order?> SelectedOrders { get; set; }
IEnumerable<Order?> _orders = new List<Order?>();
...
protected override async Task OnInitializedAsync()
    {
        user = (await _authenticationStateProvider.GetAuthenticationStateAsync()).User;

        //userName = user.Identity.Name;
        if (!user.Identity.IsAuthenticated)
        {
            NavigationManager.NavigateTo("/Identity/Account/Login", false);
        }
        _orders = await ViewAllOrdersUseCase.ExecuteAsync(user);
        SelectedOrders = new List<Order?> { _orders.FirstOrDefault() };
        _vendors = await ViewAllVendorsUseCase.ExecuteAsync();
        _customers = await ViewAllCustomersUseCase.ExecuteAsync();
    }

Here is the method I am updating IsActive = 0

async Task PassiveDetail(OrderDetail orderDetail)
    {
        if (orderDetail == _detailToInsert)
        {
            _detailToInsert = null;
        }

        await _gridDetail.UpdateRow(orderDetail);
       
        await PassiveOrderDetailUseCase.ExecuteAsync(orderDetail);
       
        _orders = await ViewAllOrdersUseCase.ExecuteAsync(user);
       
        StateHasChanged();    
}

Which data (SelectedOrders, _orders) should I re-populate in order not to see the updated row (IsActive = 0) in the data grid? Can you please guide me?

Thank you.

Yes, you should repopulate your data.

But which one I don't get it :slight_smile: The one in the master? (_orders)

These are your child records - you need to repopulate them.

But the child is coming from the master (_orders), isn't it enough to re-populate _orders? But even though I re-populated _orders, it did not work, I mean IsActive = 0 row is still in there. What am I possibly doing wrong?

<RadzenDataGrid @ref="_grid" AllowFiltering="true" AllowPaging="true" PageSize="7" AllowSorting="true" RowClick="RowClick" ExpandMode="DataGridExpandMode.Single"
                Data="@_orders" TItem="Order" EditMode="DataGridEditMode.Single" RowUpdate="@OnUpdateRow" RowCreate="@OnCreateRow" @bind-Value="@SelectedOrders"
                ShowExpandColumn="false" ShowPagingSummary="true" AllowColumnResize="true" >
    <Template Context="order">
        
        <RadzenTabs>
            <Tabs>
                <RadzenTabsItem Text="Order Details">
                    
                    <RadzenDataGrid @ref="_gridDetail" AllowFiltering="true" AllowPaging="true" PageSize="5" AllowSorting="true" Data="@order.OrderDetails" 
                    TItem="OrderDetail" EditMode="DataGridEditMode.Multiple" RowUpdate="@OnUpdateRowDetail" RowCreate="@OnCreateRowDetail" AllowColumnResize="true"
                                    AllowColumnPicking="true" ShowPagingSummary="true" ColumnWidth="150px" >

I'm afraid that I don't understand fully your case since you've posted only parts of your code. You need to repopulate the collection which you've updated - not sure if these is your child or your master data.

Here is full code :slight_smile: Hope you can guide me.

@page "/orders"

@using IMS.CoreBusiness
@using IMS.Plugins.EFCore.Migrations
@using IMS.UseCases.Interfaces.Order
@using IMS.UseCases.Interfaces.OrderDetail
@using System.Globalization
@using System.Security.Claims
@using IMS.UseCases.Interfaces.Customer
@using IMS.UseCases.Interfaces.Vendor
@using Vendor = IMS.CoreBusiness.Vendor
@using OfficeOpenXml
@using OfficeOpenXml.Style


@inject NavigationManager NavigationManager
@inject IViewAllOrdersUseCase ViewAllOrdersUseCase
@inject IAddOrderUseCase AddOrderUseCase
@inject IEditOrderUseCase EditOrderUseCase
@inject IAddOrderDetailUseCase AddOrderDetailUseCase
@inject IEditOrderDetailUseCase EditOrderDetailUseCase
@inject IViewAllVendorsUseCase ViewAllVendorsUseCase
@inject IViewOrdersByStatusUseCase ViewOrdersByStatusUseCase
@inject ICancelOrderUseCase CancelOrderUseCase
@inject ICancelOrderDetailUseCase CancelOrderDetailUseCase
@inject IViewAllCustomersUseCase ViewAllCustomersUseCase
@inject IPassiveOrderDetailUseCase PassiveOrderDetailUseCase
@inject IJSRuntime JS
@inject AuthenticationStateProvider _authenticationStateProvider
@inject DialogService DialogService


<style>
    #wrapper { overflow: auto; }

    #c1 { float: right; }

    #c2 { float: right; }

    #c3 { float: right; }
</style>
@if (DisplayAlert) {
    <div class="alert alert-success alert-dismissible d-flex align-items-center fade show">
        <i class="bi-check-circle-fill"></i>
        <strong class="mx-2">Success!</strong> Your message has been sent successfully.
        <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
    </div>
}
<h1>Orders</h1>
<RadzenButton Icon="add_circle_outline" style="margin-bottom: 10px" Text="Add New Order" Click="@InsertRow" Disabled="@(_orderToInsert != null)"/><RadzenButton Text="Export XLS" Icon="grid_on" Click="@(args => ExportExcel())" Class="mb-4 mr-2" />
<RadzenDataGrid @ref="_grid" AllowFiltering="true" AllowPaging="true" PageSize="7" AllowSorting="true" RowClick="RowClick" ExpandMode="DataGridExpandMode.Single"
                Data="@_orders" TItem="Order" EditMode="DataGridEditMode.Single" RowUpdate="@OnUpdateRow" RowCreate="@OnCreateRow" @bind-Value="@SelectedOrders"
                ShowExpandColumn="false" ShowPagingSummary="true" AllowColumnResize="true" >
    <Template Context="order">
        <RadzenCard Style="margin-bottom: 20px">
            Customer:
            <b>@order?.Customer?.Name</b>
        </RadzenCard>
        <RadzenTabs>
            <Tabs>
                <RadzenTabsItem Text="Order Details">
                    <div id="wrapper">
                        <RadzenButton Icon="add_circle_outline" style="margin-bottom: 10px" Text="Add Order Detail" Click="@(() => InsertDetailRow(order.Id))" Disabled="@(_detailToInsert != null)"/>
                        <RadzenButton Text="Export XLS" Icon="grid_on" Click="@(args => ExportDetailExcel())" Class="mb-4 mr-2" />
                        <RadzenButton Icon="close" id="c3" style="margin-bottom: 10px;" ButtonStyle="ButtonStyle.Light" Click="@(args => CancelEdits(SelectedOrders.FirstOrDefault()?.OrderDetails))" />
                        <RadzenButton Icon="save" style="margin-bottom: 10px; margin-right: 10px" Text="Save Details" id="c2" Click="@(args => SaveRowDetails(SelectedOrders.FirstOrDefault()?.OrderDetails))"/>
                        <RadzenButton Icon="border_color" style="margin-bottom: 10px; margin-right: 10px" Text="Edit Details" id="c1" Click="@(args => EditRowDetails(SelectedOrders.FirstOrDefault()?.OrderDetails))" @onclick:stopPropagation="true"/>
                        
                        
                    </div>
                    <RadzenDataGrid @ref="_gridDetail" AllowFiltering="true" AllowPaging="true" PageSize="5" AllowSorting="true" Data="@order.OrderDetails" 
                    TItem="OrderDetail" EditMode="DataGridEditMode.Multiple" RowUpdate="@OnUpdateRowDetail" RowCreate="@OnCreateRowDetail" AllowColumnResize="true"
                                    AllowColumnPicking="true" ShowPagingSummary="true" ColumnWidth="150px" >
                        <Columns>

                            <RadzenDataGridColumn TItem="OrderDetail" Property="Id" Title="Product Number" Frozen="true" OrderIndex="1"/>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="ProductCode" Title="Code" Frozen="true" OrderIndex="2">
                                <EditTemplate Context="orderDetail">
                                    <RadzenTextBox @bind-Value="orderDetail.ProductCode" Style="width: 100%; display: block" Name="ProductCode"/>
                                    <RadzenRequiredValidator Text="Product Code is required" Component="ProductCode" Popup="true" Style="position: absolute"/>
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            @*<RadzenDataGridColumn TItem="OrderDetail" Property="ProductName" Title="Name" Frozen="true" OrderIndex="3">
                                <EditTemplate Context="orderDetail">
                                    <RadzenTextBox @bind-Value="orderDetail.ProductName" Style="width: 100%; display: block" Name="ProductName"/>
                                    <RadzenRequiredValidator Text="Product Name is required" Component="ProductName" Popup="true" Style="position: absolute"/>
                                </EditTemplate>
                            </RadzenDataGridColumn>*@
                            <RadzenDataGridColumn TItem="OrderDetail" Property="Vendor.Name" Title="Vendor" Width="200px" OrderIndex="4">
                                <EditTemplate Context="orderDetail">
                                    <RadzenDropDownDataGrid TValue="int"  AllowFiltering="true" AllowClear="true" FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive" FilterOperator="StringFilterOperator.Contains"
                                                            Data=@_vendors Count="5" TextProperty="Name" ValueProperty="Id"
                                                            Class="w-100" @bind-Value="orderDetail.VendorId"/>
                                    
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="Currency" Title="Currency" OrderIndex="5">
                                <EditTemplate Context="orderDetail">
                                   <RadzenDropDown AllowClear="true" TValue="string" Class="w-100" Data=@currency @bind-Value="orderDetail.Currency" Name="Currency" />
                                    <RadzenRequiredValidator Text="Currency is required" Component="Currency" Popup="true" Style="position: absolute"/>
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="Quantity" Title="Quantity" OrderIndex="6">
                                <EditTemplate Context="orderDetail">
                                    <RadzenNumeric TValue="int" Min="1" @bind-Value="orderDetail.Quantity" Style="width: 100%; display: block" Name="Quantity"/>
                                    <RadzenRequiredValidator Text="Quantity is required" Component="Quantity" Popup="true" Style="position: absolute"/>
                                </EditTemplate>
                                <FooterTemplate>
                                    <b>@string.Format(new CultureInfo("tr-TR"), "{0:G}", SelectedOrders?.FirstOrDefault()?.OrderDetails.Sum(o => o.Quantity))</b>
                                </FooterTemplate>
                            </RadzenDataGridColumn>
                            @*<AuthorizeView Roles="Administrators"> *@
                                <RadzenDataGridColumn TItem="OrderDetail" Property="BuyUnitPrice" Title="Buy Unit Price" OrderIndex="7">
                                <Template Context="detail">
                                    @switch (detail.Currency)
                                    {
                                        case "Dolar":
                                            @string.Format(new CultureInfo("en-US"), "{0:C2}", detail.BuyUnitPrice)
                                            break;
                                        case "Euro":
                                            @string.Format(new CultureInfo("en-FR"), "{0:C2}", detail.BuyUnitPrice)
                                            break;
                                        default:
                                            @string.Format(new CultureInfo("tr-TR"), "{0:C2}", detail.BuyUnitPrice)
                                            break;
                                    }
                                </Template>
                                <EditTemplate Context="orderDetail">
                                    <RadzenNumeric TValue="double" Min="1" @bind-Value="orderDetail.BuyUnitPrice" Style="width: 100%; display: block" Name="BuyUnitPrice"/>
                                    <RadzenRequiredValidator Text="BuyUnitPrice is required" Component="BuyUnitPrice" Popup="true" Style="position: absolute"/>
                                </EditTemplate>
                            </RadzenDataGridColumn>
                           @* </AuthorizeView>*@
                            <RadzenDataGridColumn TItem="OrderDetail" Property="TotalBuyPrice" Title="Total Buy" OrderIndex="8">
                               <Template Context="detail">
                                    @switch (detail.Currency)
                                    {
                                        case "Dolar":
                                            @string.Format(new CultureInfo("en-US"), "{0:C2}", detail.BuyUnitPrice * detail.Quantity)
                                            break;
                                        case "Euro":
                                            @string.Format(new CultureInfo("en-FR"), "{0:C2}", detail.BuyUnitPrice * detail.Quantity)
                                            break;
                                        default:
                                            @string.Format(new CultureInfo("tr-TR"), "{0:C2}", detail.BuyUnitPrice * detail.Quantity)
                                            break;
                                    }
                                </Template>
                                <FooterTemplate>
                                    @if(SelectedOrders?.FirstOrDefault()?.OrderDetails.GroupBy(x => x.Currency).Count() == 1)
                                    {
                                        @switch (SelectedOrders?.FirstOrDefault()?.OrderDetails.FirstOrDefault().Currency)
                                        {
                                            case "Dolar":
                                                <b>@string.Format(new CultureInfo("tr-TR"), "{0:C2}", SelectedOrders?.FirstOrDefault()?.OrderDetails.Sum(o => o.TotalBuyPrice))</b>
                                                break;
                                            case "Euro":
                                                <b>@string.Format(new CultureInfo("en-FR"), "{0:C2}", SelectedOrders?.FirstOrDefault()?.OrderDetails.Sum(o => o.TotalBuyPrice))</b>
                                                break;
                                            default:
                                                <b>@string.Format(new CultureInfo("tr-TR"), "{0:C2}", SelectedOrders?.FirstOrDefault()?.OrderDetails.Sum(o => o.TotalBuyPrice))</b>
                                                break;
                                        }
                                        
                                    }
                                </FooterTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="CostRatio" Title="Cost Ratio" OrderIndex="9">
                                <Template Context="detail">
                                    @string.Format(new CultureInfo("tr-TR"), "{0:D2}","%" + detail.CostRatio/100)
                                </Template>
                                <EditTemplate Context="orderDetail">
                                    <RadzenNumeric TValue="double" Min="1" @bind-Value="orderDetail.CostRatio" Style="width: 100%; display: block" Name="CostRatio"/>
                                    <RadzenRequiredValidator Text="Cost Ratio is required" Component="CostRatio" Popup="true" Style="position: absolute"/>
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="UnitCost" Title="Unit Cost" OrderIndex="10">
                                <Template Context="detail">
                                    @switch (detail.Currency)
                                    {
                                        case "Dolar":
                                            @string.Format(new CultureInfo("en-US"), "{0:C}", (detail.BuyUnitPrice * (detail.CostRatio / 100)) + detail.BuyUnitPrice)
                                            break;
                                        case "Euro":
                                            @string.Format(new CultureInfo("en-FR"), "{0:C}", (detail.BuyUnitPrice * (detail.CostRatio / 100)) + detail.BuyUnitPrice)
                                            break;
                                        default:
                                            @string.Format(new CultureInfo("tr-TR"), "{0:C}", (detail.BuyUnitPrice * (detail.CostRatio / 100)) + detail.BuyUnitPrice)
                                            break;
                                    }
                                </Template>
                            </RadzenDataGridColumn>
                        <RadzenDataGridColumn TItem="OrderDetail" Property="TotalUnitCost" Title="Total Unit Cost" OrderIndex="11">
                            <Template Context="detail">
                                @switch (detail.Currency)
                                {
                                    case "Dolar":
                                        @string.Format(new CultureInfo("en-US"), "{0:C}", (detail.Quantity * detail.UnitCost))
                                        break;
                                    case "Euro":
                                        @string.Format(new CultureInfo("en-FR"), "{0:C}", (detail.Quantity * detail.UnitCost))
                                        break;
                                    default:
                                        @string.Format(new CultureInfo("tr-TR"), "{0:C}", (detail.Quantity * detail.UnitCost))
                                        break;
                                }
                            </Template>
                        </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="SellUnitPrice" Title="Sell Unit Price" OrderIndex="12">
                                <Template Context="detail">
                                    @switch (detail.Currency)
                                    {
                                        case "Dolar":
                                            @string.Format(new CultureInfo("en-US"), "{0:C2}", detail.SellUnitPrice)
                                            break;
                                        case "Euro":
                                            @string.Format(new CultureInfo("en-FR"), "{0:C2}", detail.SellUnitPrice)
                                            break;
                                        default:
                                            @string.Format(new CultureInfo("tr-TR"), "{0:C2}", detail.SellUnitPrice)
                                            break;
                                    }
                                </Template>
                                <EditTemplate Context="orderDetail">
                                    <RadzenNumeric TValue="double?" Min="1" @bind-Value="orderDetail.SellUnitPrice" Style="width: 100%; display: block" Name="SellUnitPrice"/>
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="TotalSellPrice" Title="Total Sell" OrderIndex="13">
                                <Template Context="detail">
                                    @switch (detail.Currency)
                                    {
                                        case "Dolar":
                                            @string.Format(new CultureInfo("en-US"), "{0:C2}", detail.SellUnitPrice * detail.Quantity)
                                            break;
                                        case "Euro":
                                            @string.Format(new CultureInfo("en-FR"), "{0:C2}", detail.SellUnitPrice * detail.Quantity)
                                            break;
                                        default:
                                            @string.Format(new CultureInfo("tr-TR"), "{0:C2}", detail.SellUnitPrice * detail.Quantity)
                                            break;
                                    }
                                </Template>
                                <FooterTemplate>
                                    @if(SelectedOrders?.FirstOrDefault()?.OrderDetails.GroupBy(x => x.Currency).Count() == 1)
                                    {
                                        @switch (SelectedOrders?.FirstOrDefault()?.OrderDetails.FirstOrDefault().Currency)
                                        {
                                            case "Dolar":
                                                <b>@string.Format(new CultureInfo("tr-TR"), "{0:C2}", SelectedOrders?.FirstOrDefault()?.OrderDetails.Sum(o => o.TotalSellPrice))</b>
                                                break;
                                            case "Euro":
                                                <b>@string.Format(new CultureInfo("en-FR"), "{0:C2}", SelectedOrders?.FirstOrDefault()?.OrderDetails.Sum(o => o.TotalSellPrice))</b>
                                                break;
                                            default:
                                                <b>@string.Format(new CultureInfo("tr-TR"), "{0:C2}", SelectedOrders?.FirstOrDefault()?.OrderDetails.Sum(o => o.TotalSellPrice))</b>
                                                break;                                        }
                                                                            }
                                </FooterTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="ShippingNumber" Title="Shipment" OrderIndex="14">
                                <EditTemplate Context="orderDetail">
                                    <RadzenTextBox @bind-Value="orderDetail.ShippingNumber" Style="width: 100%; display: block" Name="ShippingNumber"/>
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="TrackingNumber" Title="Tracking Number" OrderIndex="15">
                                <EditTemplate Context="orderDetail">
                                    <RadzenTextBox @bind-Value="orderDetail.TrackingNumber" Style="width: 100%; display: block" Name="TrackingNumber"/>  
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="Description" Title="Description" OrderIndex="16">
                                <EditTemplate Context="orderDetail">
                                    <RadzenTextBox @bind-Value="orderDetail.Description" Style="width: 100%; display: block" Name="Description"/>
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="Status" Title="Status" OrderIndex="17">
                                <EditTemplate Context="orderDetail">
                                    <RadzenDropDown AllowClear="true" TValue="string" Class="w-100" Data=@detailStatusList @bind-Value="orderDetail.Status" Name="Status" Change=@(args => OnChange(args, order.Id)) />
                                    <RadzenRequiredValidator Text="Status is required" Component="Status" Popup="true" Style="position: absolute"/>
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="CustomerStockCode" Title="Customer Stock" OrderIndex="18">
                                <EditTemplate Context="orderDetail">
                                    <RadzenTextBox @bind-Value="orderDetail.CustomerStockCode" Style="width: 100%; display: block" Name="CustomerStockCode"/>
                                    <RadzenRequiredValidator Text="Customer Stock Code is required" Component="CustomerStockCode" Popup="true" Style="position: absolute"/>
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="CustomerOrderNumber" Title="Customer Order" OrderIndex="19">
                                <EditTemplate Context="orderDetail">
                                    <RadzenTextBox @bind-Value="orderDetail.CustomerOrderNumber" Style="width: 100%; display: block" Name="CustomerOrderNumber"/>
                                    <RadzenRequiredValidator Text="Customer Order Number is required" Component="CustomerOrderNumber" Popup="true" Style="position: absolute" />
                                </EditTemplate>
                            </RadzenDataGridColumn>
                            <RadzenDataGridColumn TItem="OrderDetail" Property="OrderId" Title="Order Id" OrderIndex="20"/>
                            <RadzenDataGridColumn TItem="OrderDetail" Context="orderDetail" Filterable="false" Sortable="false" TextAlign="TextAlign.Center" Width="200px" OrderIndex="20">
                                <Template Context="detail">
                                    <RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Primary" Class="m-1" Click="@(args => EditRowDetail(detail))" @onclick:stopPropagation="true">
                                    </RadzenButton>
                                </Template>
                                <EditTemplate Context="detail">
                                    <RadzenButton Icon="check" ButtonStyle="ButtonStyle.Primary" Class="m-1" Click="@(args => SaveRowDetail(detail))">
                                    </RadzenButton>
                                    <RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Class="m-1" Click="@(args => CancelEditDetail(detail))">
                                    </RadzenButton>
                                    <RadzenButton Icon="delete" ButtonStyle="ButtonStyle.Danger" Class="m-1" Click="@(args => ShowInlineDialog(detail))">
                                    </RadzenButton>
                                </EditTemplate>
                            </RadzenDataGridColumn>
                        </Columns>
                    </RadzenDataGrid>
                </RadzenTabsItem>
            </Tabs>
        </RadzenTabs>
    </Template>
    <Columns>
        <RadzenDataGridColumn TItem="Order" Property="Id" Title="Order ID" Width="120px"/>
        <RadzenDataGridColumn TItem="Order" Property="Customer.Name" Title="Customer" Width="200px">
            <EditTemplate Context="order">
                <RadzenDropDownDataGrid TValue="int"  AllowFiltering="true" AllowClear="true" FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive" FilterOperator="StringFilterOperator.Contains"
                                        Data=@_customers Count="5" TextProperty="Name" ValueProperty="Id"
                                        Class="w-100" @bind-Value="order.CustomerId"/>                                    
            </EditTemplate>
        </RadzenDataGridColumn>
        <RadzenDataGridColumn TItem="Order" Property="OrderDateTime" Title="Order Date" Width="200px">
            <Template Context="order">
                @($"{order.OrderDateTime:dd/MM/yyyy}")
            </Template>
            <EditTemplate Context="order">
                <RadzenDatePicker @bind-Value="order.OrderDateTime" DateFormat="dd/MM/yyyy HH:mm" Class="w-100"/>
            </EditTemplate>
        </RadzenDataGridColumn>
        <RadzenDataGridColumn TItem="Order" Property="Status" Title="Status" Width="100px">
        </RadzenDataGridColumn>
                <RadzenDataGridColumn TItem="Order" Context="order" Filterable="false" Sortable="false" TextAlign="TextAlign.Center" Width="120px">
            <Template Context="order">
                <RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Primary" Class="m-1" Click="@(args => EditRow(order))" @onclick:stopPropagation="true">
                </RadzenButton>
            </Template>
            <EditTemplate Context="order">
                <RadzenButton Icon="check" ButtonStyle="ButtonStyle.Primary" Class="m-1" Click="@(args => SaveRow(order))">
                </RadzenButton>
                <RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Class="m-1" Click="@(args => CancelEdit(order))">
                </RadzenButton>
            </EditTemplate>
        </RadzenDataGridColumn>
    </Columns>
</RadzenDataGrid>
@code {
    [Parameter]
    public bool DisplayAlert { get; set; } = false; 
    [Parameter]
    public string? SelectedStatus { get; set; }
    readonly List<string> detailStatusList = new() { "At customs", "Being supplied", "Cancelled", "Completed", "Getting ready", "In warehouse",  "Shipped" };
    readonly List<string> orderStatusList = new() { "Continues", "Cancelled", "Completed" };
    readonly List<string> currency = new() { "TL", "Dolar", "Euro"};
    IList<Order?> SelectedOrders { get; set; }
    IEnumerable<Order?> _orders = new List<Order?>();
    IEnumerable<Vendor?> _vendors;
    IEnumerable<Customer?> _customers;
    IQueryable<Order?> filter;
    IQueryable<OrderDetail?> filterDetail;
    RadzenDataGrid<Order?> _grid;
    RadzenDataGrid<OrderDetail> _gridDetail;
    Order? _orderToInsert;
    OrderDetail? _detailToInsert;
    ClaimsPrincipal user;

    protected override async Task OnInitializedAsync()
    {
        user = (await _authenticationStateProvider.GetAuthenticationStateAsync()).User;
       
        if (!user.Identity.IsAuthenticated)
        {
            NavigationManager.NavigateTo("/Identity/Account/Login", false);
        }
        _orders = await ViewAllOrdersUseCase.ExecuteAsync(user);
        SelectedOrders = new List<Order?> { _orders.FirstOrDefault() };
        _vendors = await ViewAllVendorsUseCase.ExecuteAsync();
        _customers = await ViewAllCustomersUseCase.ExecuteAsync();
    }
    private void OnChange(object args, int id)
    {
        if(args != null){
            SelectedStatus = args.ToString();
        }
    }
    private async Task RowClick(DataGridRowMouseEventArgs<Order> mouseClick) {
        await _grid!.ExpandRow(mouseClick.Data);
    }
    private async Task InsertRow()
    {
        _orderToInsert = new Order
        {
            OrderDateTime = DateTime.Now,
            OrderDetails = new List<OrderDetail>()
        };
        await _grid.InsertRow(_orderToInsert);
    }
    private async Task InsertDetailRow(int id)
    {
        _detailToInsert = new OrderDetail
        {
            OrderId = id
        };
        await _gridDetail.InsertRow(_detailToInsert);
    }
    private async Task OnCreateRow(Order? order)
    {
        if (order != null)
        {
            await AddOrderUseCase.ExecuteAsync(order, user);
        }
    }
    private async Task OnCreateRowDetail(OrderDetail? orderDetail)
    {
        if (orderDetail != null)
        {
            await AddOrderDetailUseCase.ExecuteAsync(orderDetail);
        }
    }
    private async Task OnUpdateRow(Order order)
    {
        if (order == _orderToInsert)
        {
            _orderToInsert = null;
        }

        if (order != null)
        {
            await EditOrderUseCase.ExecuteAsync(order);
        }
    }

    private async Task OnUpdateRowDetail(OrderDetail orderDetail)
    {
        if (orderDetail == _detailToInsert)
        {
            _detailToInsert = null;
        }
        if (orderDetail != null)
        {
            await EditOrderDetailUseCase.ExecuteAsync(orderDetail);
        }
    }

    private void CancelEdit(Order? order)
    {
        if (order == _orderToInsert)
        {
            _orderToInsert = null;
        }
        _grid.CancelEditRow(order);
        CancelOrderUseCase.Execute(order);
    }

    private void CancelEditDetail(OrderDetail orderDetail)
    {
        if (orderDetail == _detailToInsert)
        {
            _detailToInsert = null;
        }
        _gridDetail.CancelEditRow(orderDetail);
        CancelOrderDetailUseCase.Execute(orderDetail);
    } 

    async Task EditRow(Order? order)
    {
        await _grid.EditRow(order);
    }

    async Task EditRowDetail(OrderDetail orderDetail)
    {
        await _gridDetail.EditRow(orderDetail);
    }

    async Task EditRowDetails(IList<OrderDetail?> SelectedOrders)
    {
        foreach (var detail in SelectedOrders)
        {
            await _gridDetail.EditRow(detail);
        }
    }
    private void CancelEdits(IList<OrderDetail?> SelectedOrders){

        foreach (var detail in SelectedOrders)
        {
            if (detail == _detailToInsert)
            {
                _detailToInsert = null;
            }
            _gridDetail.CancelEditRow(detail);
            CancelOrderDetailUseCase.Execute(detail);
        }
    }

    async Task SaveRow(Order? order)
    {
        if (order == _orderToInsert)
        {
            _orderToInsert = null;
        }
        await _grid.UpdateRow(order);
        _orders = await ViewAllOrdersUseCase.ExecuteAsync(user);
        StateHasChanged();
    }
    async Task SaveRowDetail(OrderDetail orderDetail)
    {
        if (orderDetail == _detailToInsert)
        {
            _detailToInsert = null;
        }
        await _gridDetail.UpdateRow(orderDetail);
        
    }
    async Task ShowInlineDialog(OrderDetail orderDetail)
    {
        ...
    }
    async Task PassiveDetail(OrderDetail orderDetail)
    {
        await ShowInlineDialog(orderDetail);
        if (orderDetail == _detailToInsert)
        {
            _detailToInsert = null;
        }
        await _gridDetail.UpdateRow(orderDetail);
        await PassiveOrderDetailUseCase.ExecuteAsync(orderDetail);
        await _gridDetail.Reload();
        await _grid.Reload();
        _orders = await ViewAllOrdersUseCase.ExecuteAsync(user);       
        StateHasChanged();        
    }
    async Task SaveRowDetails(IList<OrderDetail?> SelectedOrders)
    {
        var id = 0;
        foreach (var detail in SelectedOrders)
        {
            id = detail.OrderId;
            if (detail == _detailToInsert)
            {
                _detailToInsert = null;
            }
            await _gridDetail.UpdateRow(detail);
        }
          }           
}

I don't see where IsActive is declared. Is it child record or master record property?

It is a child record not visible on the grid.

Your child DataGrid is populated from a collection reference property

Do you get everything here? If this is the case you will need to update _orders to get the latest child records as well or you should change your code to get child records on expand similar to this demo:

In this case when you update something in your child records you can re-get them only not the entire set of data.

Yes, _orders get everything.

I think I found the suspect. The query shouldn't get the IsActive=0 but it somehow gets! Any ideas for this situation?

Here is the query:

public async Task<IEnumerable<Order?>> GetAllOrders(ClaimsPrincipal user)
        {
            if (user.IsInRole("Administrators"))
            {
                return await _db.Orders.Include(d => d.OrderDetails.Where(od => od.IsActive == 1)).ThenInclude(v => v.Vendor).ToListAsync();
            }
            
            return await _db.Orders.Include(d => d.OrderDetails.Where(od => od.IsActive == 1)).ThenInclude(v => v.Vendor).ToListAsync();

        }

Hi @Raysefo,

I don't think this question is related to Radzen.Blazor components. I suggest debugging your code and tracing the SQL queries made to your database.