如何调用OnBatchSave="BeforeSave"

问题描述 投票:0回答:1

我的自定义 SfDialog 有问题。首先我解释一下我想要发生什么。也就是说,在用户对网格进行更改,然后单击工具栏中的“更新”后,会出现我的“自定义 SfDialog”,此对话框应该用于保护用户,无论他或她是否真的确定要对数据库进行更新。到目前为止,一切都很好。现在,如果用户在对话框中单击“是”,逻辑应该调用 BeforeSave 方法来真正保存数据库中的更改。

我的问题是我真的不知道如何调用方法BeforeSave。到目前为止我已经尝试过:

我的相关Syncfusion网格和自定义对话框

<SfGrid DataSource="@GridData"@ref="Grid" 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>
  <!-- irrelvant grid columns -->
 </GridColumns>
</SfGrid>

<SfDialog @ref="DialogUpdate" Width="250px" Visible="false" IsModal="true">
 <DialogTemplates>
    <Content> Sind Sie sicher, dass Sie die Änderungen rückgängig machen wollen?</Content>
    <FooterTemplate>
        <SfButton OnClick="@OkClick" Content="Ja" IsPrimary="true"></SfButton>
        <SfButton OnClick="@CancelClick" Content="Nein"></SfButton>
    </FooterTemplate>
 </DialogTemplates>
</SfDialog>

@code{}逻辑

    public async Task ToolbarClickHandler(ClickEventArgs args)
{
    if(args.Item.Text == "Update")
    {
        await DialogUpdate!.ShowAsync();
        args.Cancel = true;
    }
}

    private async Task OkClick()
{
    if (DialogUpdate != null)
    {
        await DialogUpdate.HideAsync();
        await BeforeSave(new BeforeBatchSaveArgs<Role>());
    }
}

public async Task BeforeSave(BeforeBatchSaveArgs<Role> args){
  var changedRecords = args.BatchChanges.ChangedRecords; //Throws Exception when called like I did
//... irrelevant code for saving data in db 
}

这样做会在 BeforeSave 方法开始时引发异常。我不知道如何调用该方法,因为参数 args 从 SfGrid 获取其值。

c# blazor blazor-server-side syncfusion
1个回答
0
投票

试试这个。使用

SfGrid.GetBatchChangesAsync()
获取当前批次更改,然后用它创建一个新的
BeforeBatchSaveArgs
。其中似乎还有另外两个属性
Cancel
PreventRender
不确定是否需要定义它们。

private async Task OkClick()
{
    if (DialogUpdate != null)
    {
        await DialogUpdate.HideAsync();
        BatchChanges<Role> batchChanges = await GridData.GetBatchChangesAsync();
        var batchChangedArgs = new BeforeBatchSaveArgs<Role>() { BatchChanges = batchChanges };
        await BeforeSave(batchChangedArgs);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.