Aller au contenu principal

LgGridCommandColumn

LgGridCommandColumn affiche un bouton de commande unique ou un menu de commandes personnalisées. Par défaut, AllowFilter, AllowSort et AllowHide sont à false.

<Columns Context="item">
<LgGridCommandColumn CommandName="open-details"
ButtonText="#OpenDetails"
CommandTooltip="#OpenDetailsTooltip" />
</Columns>
  • Package NuGet : Lagoon.UI.GridView

Les paramètres communs sont documentés dans LgGridBaseColumn.

Paramètres spécifiques​

NomTypeDéfautDescription
CommandNamestringnullNom unique de la commande, géré via OnCommandClick sur le GridView. Sans commande (ni CommandNameSelector), la cellule n'affiche ni bouton ni menu.
CommandNameSelectorFunc<TItem, string>nullCommande émise par le bouton principal, calculée pour chaque ligne ; prioritaire sur CommandName. Un résultat vide masque le bouton et le menu de la ligne.
IconNamestringPencilFillIcône du bouton principal.
IconNameSelectorFunc<TItem, string>nullIcône du bouton principal, calculée pour chaque ligne ; prioritaire sur IconName.
ButtonTextstringnullTexte du bouton principal.
ButtonAriaLabelstringnullAria-label du bouton principal.
CommandTooltipstringnullInfobulle du bouton.
CommandTooltipSelectorFunc<TItem, string>nullInfobulle du bouton, calculée pour chaque ligne ; prioritaire sur CommandTooltip.
CommandsList<LgGridCommand>[]Commandes du menu, communes à toutes les lignes.
ChildContentRenderFragmentnullDéclaration des LgGridCommand du menu, communes à toutes les lignes ; elles suivent Commands.
CommandsContentRenderFragment<GridCellContext<TItem>>nullDéclaration des LgGridCommand du menu pour chaque ligne (context.Item = élément de la ligne) ; elles suivent Commands et ChildContent. Voir Commandes du menu par ligne.
CellContentRenderFragment<GridCellContext<TItem>>nullTemplate qui remplace tout le contenu de la cellule (bouton principal et menu compris).
EditCellContentRenderFragment<GridCellContext<TItem>>nullTemplate qui remplace le contenu de la cellule d'une ligne en édition.

Paramètres de LgGridCommand (une entrée du menu) :

NomTypeDéfautDescription
CommandNamestringnullCommande émise vers OnCommandClick.
TextstringnullTexte de l'entrée.
IconNamestringnullIcône de l'entrée.
AriaLabelstringnullAria-label de l'entrée.
TooltipstringnullInfobulle de l'entrée.
ConfirmationMessagestringnullMessage de confirmation affiché avant d'émettre la commande.

Utilisation​

Commande principale et menu de commandes​

GridCommandColumnPage.razor
@inherits LgPage

<LgGridView StateId="orders-command-column"
Items="_orders"
OnCommandClick="OnCommandClickAsync"
Title="#OrdersGridTitle">
<Columns Context="item">
<LgGridTextColumn @bind-Value="item.Number" Title="#OrderNumber" />
<LgGridCommandColumn Key="order-actions"
CommandName="open"
ButtonText="#Open"
ButtonAriaLabel="#OpenOrder"
CommandTooltip="#OpenOrderTooltip"
IconName="@IconNames.All.Eye">
<LgGridCommand CommandName="duplicate" Text="#Duplicate" IconName="@IconNames.All.Files" />
<LgGridCommand CommandName="delete"
Text="#Delete"
IconName="@IconNames.Delete"
ConfirmationMessage="#ConfirmDelete" />
</LgGridCommandColumn>
</Columns>
</LgGridView>
GridCommandColumnPage.razor.cs
public partial class GridCommandColumnPage : LgPage
{
// Traite toutes les commandes de la colonne et choisit le rafraîchissement adapté.
private Task OnCommandClickAsync(GridViewCommandClickEventArgs<OrderRow> args)
{
if (args.Command == "delete")
{
_orders.Remove(args.Item);
args.RefreshMode = GridEventRefreshMode.ReloadGrid;
}
else
{
args.RefreshMode = GridEventRefreshMode.StateHasChangeRow;
}
return Task.CompletedTask;
}
}

Si plusieurs colonnes de commandes sont présentes, donnez un Key unique à chacune. Par défaut, la clé est dérivée de CommandName.

Commande, icône et infobulle par ligne​

Le fragment <Columns> n'étant matérialisé qu'une seule fois, un CommandName/IconName/CommandTooltip qui capture le contexte n'est plus recalculé par ligne. Utilisez les sélecteurs CommandNameSelector, IconNameSelector et CommandTooltipSelector (Func<TItem, string>), appelés pour chaque ligne : le bouton et la commande émise s'adaptent à l'item. La clé de la colonne reste, elle, stable (dérivée du CommandName statique).

GridCommandSelectorPage.razor
@inherits LgPage

<LgGridView StateId="orders-command-selector"
Items="_orders"
OnCommandClick="OnCommandClickAsync"
Title="#OrdersGridTitle">
<Columns Context="item">
<LgGridTextColumn @bind-Value="item.Number" Title="#OrderNumber" />
<LgGridCommandColumn Key="order-toggle"
IconNameSelector="GetToggleIcon"
CommandNameSelector="GetToggleCommand"
CommandTooltipSelector="GetToggleTooltip" />
</Columns>
</LgGridView>
GridCommandSelectorPage.razor.cs
public partial class GridCommandSelectorPage : LgPage
{
// Icône selon l'état de la ligne (verrou ouvert/fermé).
private string GetToggleIcon(OrderRow order)
{
return order.IsLocked ? IconNames.All.Lock : IconNames.All.Unlock;
}

// Commande émise selon l'état : "unlock" sur une ligne verrouillée, "lock" sinon.
private string GetToggleCommand(OrderRow order)
{
return order.IsLocked ? "unlock" : "lock";
}

// Infobulle contextualisée.
private string GetToggleTooltip(OrderRow order)
{
return order.IsLocked ? "#UnlockOrder" : "#LockOrder";
}
}

Commandes du menu par ligne​

Les LgGridCommand déclarées dans ChildContent (ou passées par Commands) sont lues une seule fois : le menu est le même pour toutes les lignes. Pour qu'une commande dépende de la ligne, déclarez-la dans le template CommandsContent : son contexte expose l'élément de la ligne (Item), et une condition @if décide de la présence de la commande. Ces commandes s'ajoutent après celles de Commands et de ChildContent ; pour maîtriser tout l'ordre du menu, déclarez toutes les commandes dans CommandsContent.

GridCommandRowCommandsPage.razor
@inherits LgPage

<LgGridView StateId="orders-row-commands"
Items="_orders"
OnCommandClick="OnCommandClickAsync"
Title="#OrdersGridTitle">
<Columns Context="item">
<LgGridTextColumn @bind-Value="item.Number" Title="#OrderNumber" />
<LgGridCommandColumn Key="order-actions"
CommandName="open"
IconName="@IconNames.All.Eye">
<ChildContent>
<LgGridCommand CommandName="delete"
Text="#Delete"
IconName="@IconNames.Delete"
ConfirmationMessage="#ConfirmDelete" />
</ChildContent>
<CommandsContent Context="cmd">
@if (cmd.Item.IsLocked)
{
<LgGridCommand CommandName="unlock" Text="#UnlockOrder" IconName="@IconNames.All.Unlock" />
}
</CommandsContent>
</LgGridCommandColumn>
</Columns>
</LgGridView>
GridCommandRowCommandsPage.razor.cs
public partial class GridCommandRowCommandsPage : LgPage
{
// Traite les commandes du menu : "unlock" n'est proposée que sur les commandes verrouillées.
private Task OnCommandClickAsync(GridViewCommandClickEventArgs<OrderRow> args)
{
if (args.Command == "unlock")
{
args.Item.IsLocked = false;
args.RefreshMode = GridEventRefreshMode.StateHasChangeRow;
}
else if (args.Command == "delete")
{
_orders.Remove(args.Item);
args.RefreshMode = GridEventRefreshMode.ReloadGrid;
}
return Task.CompletedTask;
}
}

Le menu d'une ligne n'est affiché que si elle a au moins une commande, et seulement si le bouton principal est affiché (CommandName ou CommandNameSelector non vide pour cette ligne).

Restrictions
  • CommandsContent n'est pas rendu : seules les déclarations LgGridCommand y sont lues. Tout autre composant, y compris un LgAuthorizeView, lève une NotSupportedException au rendu de la cellule. Pour conditionner une commande à une autorisation, testez-la dans le code (ex. un booléen calculé au chargement de la page) et utilisez @if.
  • Ne déclarez pas les commandes dans CellContent : ce template remplace tout le contenu de la cellule, et une LgGridCommand n'affiche rien par elle-même. La cellule reste vide.

Filtre​

Aucun filtre intégré.

Énumérations associées​

GridEventRefreshMode​

Mode de rafraîchissement appliqué après une commande via GridViewCommandClickEventArgs.RefreshMode.

ValeurDescription
NoneNe rafraîchit pas le rendu de la ligne.
StateHasChangeRowRafraîchit le rendu de la ligne (valeur par défaut).
ReloadRowRecharge les données de la ligne, retrouvée par la valeur du KeyField de la grille. Sans KeyField : l'élément est recherché dans Items avec l'égalité du type (Equals / IEquatable<T> ; sans redéfinition de l'égalité, seule la même instance est retrouvée) sur une grille locale ; sur une grille distante (ControllerUri), l'élément est retrouvé par sa propriété Id, et la grille lève une erreur si le modèle n'en a pas. Une ligne qui n'est plus trouvée garde son élément.
ReloadGridRecharge toutes les données de la grille.
Référence complète

Fiche générée depuis les sources : Référence API — LgGridCommandColumn.

Composants liés​