我的自定义 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 获取其值。
试试这个。使用
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);
}
}