You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在自定义SfDialog确认后调用Syncfusion Grid的BeforeSave方法

问题解决:Syncfusion SfGrid自定义确认对话框后批量保存异常处理

在使用Syncfusion SfGrid批量编辑模式时,自定义确认对话框替代默认更新确认后,手动调用BeforeSave方法因传入的参数无真实变更数据导致异常,以下是两种可行的解决方案:

核心问题分析

你手动实例化BeforeBatchSaveArgs<Role>()时,该对象的BatchChanges属性为null,因此访问args.BatchChanges.ChangedRecords会直接抛出空引用异常。正确的做法是让Grid自身触发批量保存流程,或直接从Grid获取真实的变更数据。


方案1:确认后触发Grid原生批量保存(推荐)

取消手动调用BeforeSave方法,转而在确认后调用Grid的BatchSaveAsync(),让Grid自动触发OnBatchSave事件,此时传入的参数会包含完整的变更数据。

  1. 确保Grid引用已正确定义(你已完成此步骤):
<SfGrid @ref="Grid" DataSource="@GridData" AllowPaging="true" AllowSorting="true"
        Toolbar="@(new List<string>() {"Add","Update", "Cancel","Delete","Search"})" Height="250">
    <GridEditSettings AllowEditing="true" AllowAdding="true" AllowDeleting="true" ShowConfirmDialog="false"
                      Mode="EditMode.Batch"></GridEditSettings>
    <GridPageSettings PageSizes="@(new string[] {"5", "10", "15", "All" })" PageSize="5"></GridPageSettings>
    <GridEvents TValue="Role" OnToolbarClick="ToolbarClickHandler" OnBatchSave="BeforeSave"></GridEvents>
    <GridColumns>
        <!-- 列配置 -->
    </GridColumns>
</SfGrid>
  1. 修改OkClick方法:
private async Task OkClick()
{
    if (DialogUpdate != null)
    {
        await DialogUpdate.HideAsync();
        // 触发Grid原生批量保存,自动传入有效参数给BeforeSave
        await Grid.BatchSaveAsync();
    }
}
  1. 保留原BeforeSave方法不变,此时args会包含真实的变更数据:
public async Task BeforeSave(BeforeBatchSaveArgs<Role> args)
{
    var changedRecords = args.BatchChanges.ChangedRecords; // 正常获取变更数据
    // 执行数据库保存逻辑
}

方案2:直接从Grid获取变更数据自行处理

若不需要依赖Grid的OnBatchSave事件,可直接通过Grid的GetBatchChanges()方法获取所有变更记录,自行处理保存逻辑:

修改OkClick方法:

private async Task OkClick()
{
    if (DialogUpdate != null)
    {
        await DialogUpdate.HideAsync();
        // 直接从Grid获取批量变更数据
        var batchChanges = Grid.GetBatchChanges();
        
        var changedRecords = batchChanges.ChangedRecords;
        var addedRecords = batchChanges.AddedRecords;
        var deletedRecords = batchChanges.DeletedRecords;
        
        // 分别处理新增、修改、删除的数据库操作
        // ...
        
        // 保存完成后清除Grid的变更状态
        await Grid.ClearBatchChangesAsync();
    }
}

额外提示

你对话框的提示文本为德语“Sind Sie sicher, dass Sie die Änderungen rückgängig machen wollen?”(是否撤销更改),与更新操作语义不符,建议修改为对应确认保存的文本,例如“确定要保存这些更改吗?”

内容的提问来源于stack exchange,提问作者Jorgetryingsomething

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:41:02