I try to simulate a one click field edition in the grid using a binding on ReadOnly or Enabled/Disabled. I works well for the ckeckboxes but for the SfNumericTextBox only the spinner buttons works.
@inherits WizardStepComponentBase
@inject ApplicationState application
@inject ActionBarState actionState;
@using System.Text.Json
@using Kairos.Models.Entities
@using Syncfusion.Blazor.Buttons
@using Syncfusion.Blazor.Grids
@using Syncfusion.Blazor.Inputs
<SfGrid @ref="grid" TValue="CollectiviteTypeOperation" datasource="@Model.CollectiviteTypeOperations" AllowResizing=true Width="100%" Height="100%">
<GridSelectionSettings Mode="Syncfusion.Blazor.Grids.SelectionMode.Both" Type="Syncfusion.Blazor.Grids.SelectionType.Single"></GridSelectionSettings>
<GridEditSettings AllowEditing="@(!Parameters.Wizard.IsReadOnly)" AllowEditOnDblClick="true" />
<GridColumns>
<GridColumn Field="@nameof(CollectiviteTypeOperation.Nature)" AllowEditing="false" Width="100px">
<Template>
@if (((CollectiviteTypeOperation)context).Nature == "D")
{
<span>Dépenses</span>
}
else
{
<span>Recettes</span>
}
</Template>
</GridColumn>
<GridColumn Field="@nameof(CollectiviteTypeOperation.Libelle)" AllowEditing="false" Width="100%"></GridColumn>
<GridColumn Field="@nameof(CollectiviteTypeOperation.RevalorisationAutomatique)" Width="105px" TextAlign="@TextAlign.Center" DisplayAsCheckBox="true">
<Template>
<SfCheckBox Checked="((CollectiviteTypeOperation)context).RevalorisationAutomatique" Disabled="Parameters.Wizard.IsReadOnly" ValueChange="OnRevalorisationAutomatiqueChange" TChecked="bool" />
</Template>
</GridColumn>
<GridColumn Field="@nameof(CollectiviteTypeOperation.PresenceTypeRevalorisation)" Width="150px" TextAlign="@TextAlign.Center" DisplayAsCheckBox="true">
<Template>
<SfCheckBox Checked="((CollectiviteTypeOperation)context).PresenceTypeRevalorisation" Disabled="Parameters.Wizard.IsReadOnly" ValueChange="OnPresenceTypeRevalorisationChange" TChecked="bool" />
</Template>
</GridColumn>
<GridColumn Field="@nameof(CollectiviteTypeOperation.PourcentageMaxDepassement)" Width="150px" TextAlign="@TextAlign.Right" EditType="@EditType.NumericEdit">
<Template>
@{
var value = ((CollectiviteTypeOperation)context).PourcentageMaxDepassement;
<SfNumericTextBox TValue="decimal" Format="n2" Value="@value" Enabled="!Parameters.Wizard.IsReadOnly" ValueChanged="OnPourcentageMaxDepassementChange"></SfNumericTextBox>
}
</Template>
</GridColumn>
<GridColumn Field="@nameof(CollectiviteTypeOperation.MontantMaxDepassement)" Width="150px" TextAlign="@TextAlign.Right" EditType="@EditType.NumericEdit"></GridColumn>
</GridColumns>
</SfGrid>
@code
{
public override string Tache => "Collectivites";
public override string Etape => "Revalorisations";
public override string Champ => "";
SfGrid<CollectiviteTypeOperation> grid;
Collectivite Model;
protected override void OnParametersSet()
{
base.OnParametersSet();
Model = (Collectivite)Parameters.Wizard.Model;
actionState.ReadOnlyChanged = ReadOnlyChanged;
Console.WriteLine("Types = " + JsonSerializer.Serialize(Model.CollectiviteTypeOperations));
}
protected void ReadOnlyChanged(FullParameters parameters)
{
this.StateHasChanged();
}
protected void OnRevalorisationAutomatiqueChange(Syncfusion.Blazor.Buttons.ChangeEventArgs<bool> args)
{
var record = grid.GetSelectedRecords().Result[0];
record.RevalorisationAutomatique = args.Checked;
}
protected void OnPresenceTypeRevalorisationChange(Syncfusion.Blazor.Buttons.ChangeEventArgs<bool> args)
{
var record = grid.GetSelectedRecords().Result[0];
record.PresenceTypeRevalorisation = args.Checked;
}
protected void OnPourcentageMaxDepassementChange(decimal args)
{
var record = grid.GetSelectedRecords().Result[0];
record.PourcentageMaxDepassement = args;
}
}