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
| Nom | Type | Défaut | Description |
|---|---|---|---|
CommandName | string | null | Nom unique de la commande, géré via OnCommandClick sur le GridView. Sans commande (ni CommandNameSelector), la cellule n'affiche ni bouton ni menu. |
CommandNameSelector | Func<TItem, string> | null | Commande é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. |
IconName | string | PencilFill | Icône du bouton principal. |
IconNameSelector | Func<TItem, string> | null | Icône du bouton principal, calculée pour chaque ligne ; prioritaire sur IconName. |
ButtonText | string | null | Texte du bouton principal. |
ButtonAriaLabel | string | null | Aria-label du bouton principal. |
CommandTooltip | string | null | Infobulle du bouton. |
CommandTooltipSelector | Func<TItem, string> | null | Infobulle du bouton, calculée pour chaque ligne ; prioritaire sur CommandTooltip. |
Commands | List<LgGridCommand> | [] | Commandes du menu, communes à toutes les lignes. |
ChildContent | RenderFragment | null | Déclaration des LgGridCommand du menu, communes à toutes les lignes ; elles suivent Commands. |
CommandsContent | RenderFragment<GridCellContext<TItem>> | null | Dé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. |
CellContent | RenderFragment<GridCellContext<TItem>> | null | Template qui remplace tout le contenu de la cellule (bouton principal et menu compris). |
EditCellContent | RenderFragment<GridCellContext<TItem>> | null | Template qui remplace le contenu de la cellule d'une ligne en édition. |
Paramètres de LgGridCommand (une entrée du menu) :
| Nom | Type | Défaut | Description |
|---|---|---|---|
CommandName | string | null | Commande émise vers OnCommandClick. |
Text | string | null | Texte de l'entrée. |
IconName | string | null | Icône de l'entrée. |
AriaLabel | string | null | Aria-label de l'entrée. |
Tooltip | string | null | Infobulle de l'entrée. |
ConfirmationMessage | string | null | Message de confirmation affiché avant d'émettre la commande. |
Utilisation
Commande principale et menu de commandes
@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>
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).
@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>
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.
@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>
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).
CommandsContentn'est pas rendu : seules les déclarationsLgGridCommandy sont lues. Tout autre composant, y compris unLgAuthorizeView, lève uneNotSupportedExceptionau 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 uneLgGridCommandn'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.
| Valeur | Description |
|---|---|
None | Ne rafraîchit pas le rendu de la ligne. |
StateHasChangeRow | Rafraîchit le rendu de la ligne (valeur par défaut). |
ReloadRow | Recharge 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. |
ReloadGrid | Recharge toutes les données de la grille. |
Fiche générée depuis les sources : Référence API — LgGridCommandColumn.
Composants liés
LgGridView— la grille de données qui héberge la colonne.LgGridTextColumn— colonne de base et paramètres communs hérités.LgGridEditColumn— édition en ligne qui hérite de cette colonne.