Blazor Server App中Radzen主从表多内联编辑问题求助
Radzen主从表内联编辑问题解决方案
问题1:新增主表行时OrderDateTime显示默认值1.01.0001,仅需显示日历图标
在RadzenGrid的OrderDateTime列配置中,通过模板判断值是否为DateTime.MinValue,仅展示日历选择按钮,非编辑状态下隐藏默认值文本:
<RadzenGridColumn TItem="Order" Property="OrderDateTime" Title="日期"> <Template Context="order"> @if (order.OrderDateTime != DateTime.MinValue) { @order.OrderDateTime.ToString("yyyy-MM-dd HH:mm") } </Template> <EditTemplate Context="order"> <RadzenDatePicker @bind-Value="order.OrderDateTime" ShowButton="true" Placeholder="选择日期" Style="width:100%" /> </EditTemplate> </RadzenGridColumn>
同时在新增订单时,手动将OrderDateTime重置为null(若实体类允许该字段为空):
var newOrder = new Order { OrderDateTime = null, OrderDetails = new List<OrderDetail>() };
问题2:子网格点击编辑按钮后无取消按钮
两种解决方式,按需选择:
方式1:通过EditSettings全局配置
<RadzenGrid TItem="OrderDetail" Data="@currentOrder.OrderDetails" EditMode="EditMode.Inline"> <EditSettings ShowCancelButton="true" ShowSaveButton="true" /> <!-- 子网格列定义 --> </RadzenGrid>
方式2:手动添加命令列控制
<RadzenGridColumn TItem="OrderDetail" Width="120px"> <Template Context="detail"> <RadzenButton Icon="edit" Click="@(() => childGrid.EditRow(detail))" /> </Template> <EditTemplate Context="detail"> <RadzenButton Icon="check" Click="@(() => childGrid.UpdateRow(detail))" /> <RadzenButton Icon="close" Click="@(() => childGrid.CancelEditRow(detail))" /> </EditTemplate> </RadzenGridColumn>
(替换childGrid为你的子网格引用变量名)
问题3:点击「Add New Order」时子网格无法添加新行
新增主表订单时,必须初始化OrderDetails为非空集合,否则子网格无法绑定空集合进行新增操作:
// 「Add New Order」按钮点击事件处理 void AddNewOrder() { var newOrder = new Order { OrderDateTime = null, // 关键:初始化空集合 OrderDetails = new List<OrderDetail>() }; orders.Add(newOrder); // 若需直接进入编辑状态 mainGrid.EditRow(newOrder); }
同时确保子网格的Data绑定到当前选中订单的OrderDetails:
<RadzenGrid @ref="mainGrid" TItem="Order" Data="@orders" SelectedItem="@selectedOrder" SelectionMode="SelectionMode.Single"> <!-- 主网格列定义 --> <ChildContent> @if (selectedOrder != null) { <RadzenGrid @ref="childGrid" TItem="OrderDetail" Data="@selectedOrder.OrderDetails" EditMode="EditMode.Inline"> <!-- 子网格列定义 --> <RadzenGridColumn Width="100px"> <Template> <RadzenButton Icon="add" Click="@(() => childGrid.InsertRow(new OrderDetail()))" /> </Template> </RadzenGridColumn> </RadzenGrid> } </ChildContent> </RadzenGrid>
内容的提问来源于stack exchange,提问作者raysefo
相关产品推荐
相关产品推荐

