Почему ExpandRow не работает после добавления новой строки?C#

Место общения программистов C#
Anonymous
Почему ExpandRow не работает после добавления новой строки?

Сообщение Anonymous »

В моем приложении я использую две сетки данных друг в друге, например мастер-детали. Подробно, я использую встроенное редактирование, например, в Radzen Blazor DataGrid InLine EditingЕсли я нажму «Добавить детали заказа» и введу данные, а затем сохраните их (OnCreateRowDetail). Мне удается оставаться на той же странице, но я хочу сохранить строку развернутой, но она свернута.
Вот упрощенный код:

Код: Выделить всё



Customer:
@order?.Customer?.Name[/b]






























































@code {

IList SelectedOrders { get; set; }
IQueryable _ordersDto;
IQueryable _order;

RadzenDataGrid _grid;
RadzenDataGrid _gridDetail;

OrderDto? _orderToInsert;
OrderDetailDto? _detailToInsert;
OrderDto orders;
Order orderMap;
OrderDetail orderDetailMap;

int? current_page;
int? pageIndex;

protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
_grid.SettingsChanged = new EventCallback(this, async (DataGridSettings settings) =>
{
current_page = settings.CurrentPage;
});
}
base.OnAfterRender(firstRender);
}

protected override async Task OnInitializedAsync()
{

_order = ViewOrdersUseCase.Execute(user);
_ordersDto = Mapper.ProjectTo(_order);

SelectedOrders = new List { _ordersDto.FirstOrDefault() };

}

private async Task RowClick(DataGridRowMouseEventArgs mouseClick)
{
await _grid!.ExpandRow(mouseClick.Data);
SelectedOrders = _ordersDto.Where(o => o.Id == mouseClick.Data.Id).ToList();

if (SelectedOrders.Count > 0)
{
if (SelectedOrders[0].Status == "Completed" || SelectedOrders[0].Status == "Cancelled")
{
_detailToInsert = new OrderDetailDto();
}
else
{
_detailToInsert = null;
}
}
}

// Add a method to find the parent OrderDto of a given OrderDetailDto
private OrderDto? GetParentOrder(OrderDetailDto detail)
{
return _ordersDto.FirstOrDefault(o => o.OrderDetailsDto.Any(d => d.Id == detail.Id));
}

private async Task OnCreateRowDetail(OrderDetailDto? orderDetail)
{
if (orderDetail != null)
{
orderDetailMap = new OrderDetail();
Mapper.Map(orderDetail, orderDetailMap);

// Add the new order detail to the database
var addedOrderDetail = await AddOrderDetailUseCase.ExecuteAsync(orderDetailMap);

Mapper.Map(addedOrderDetail, orderDetail);
// Find the parent order
var parentOrder = GetParentOrder(orderDetail);

if (parentOrder != null)
{
pageIndex = current_page;
_order = ViewOrdersUseCase.Execute(user);
_ordersDto = Mapper.ProjectTo(_order);

await _gridDetail.GoToPage((int)pageIndex);
await _grid.ExpandRow(_ordersDto.FirstOrDefault(o =>  o.Id == parentOrder.Id));

}

}
}

private async Task OnUpdateRowDetail(OrderDetailDto orderDetail)
{
if (orderDetail == _detailToInsert)
{
_detailToInsert = null;
}

if (orderDetail != null)
{
orderDetailMap = new OrderDetail();
Mapper.Map(orderDetail, orderDetailMap);

// Update the order detail in the database
var updatedOrderDetail = await EditOrderDetailUseCase.ExecuteAsync(orderDetailMap);

// Find the parent order
var parentOrder = GetParentOrder(orderDetail);

if (parentOrder != null)
{
parentOrder.OrderDetailsDto = Mapper.Map(
await ViewOrderDetailsByOrderIdUseCase.ExecuteAsync(parentOrder.Id)
);

// Notify Blazor of the changes
StateHasChanged();
}
}
}

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

async Task SaveRowDetail(OrderDetailDto orderDetail)
{
await _gridDetail.UpdateRow(orderDetail);

if (orderDetail.ProductCode != null)
{
if (orderDetail == _detailToInsert)
{
_detailToInsert = null;
}
}

await _gridDetail.ExpandRow(orderDetail);
StateHasChanged();

}

}
Есть идеи, почему строка НЕ ​​расширяется? _ordersDto.FirstOrDefault(o => o.Id ==parentOrder.Id) возвращает действительный заказ с новыми добавленными деталями.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -a-new-row

Вернуться в «C#»