LgGridTextColumn
LgGridTextColumn est la colonne texte de LgGridView : sa valeur est toujours une string. Elle sert aussi de point d'entrée pour les paramètres communs hérités de LgGridBaseColumn.
<Columns Context="item">
<LgGridTextColumn @bind-Value="item.Name" Title="#Name" />
</Columns>
- Espace de noms :
Lagoon.UI.Components - Hérite de :
LgGridBaseTextColumn<TItem, string> - Package NuGet :
Lagoon.UI.GridView
Pour lier une valeur qui n'est pas une string, utilisez la colonne spécialisée du type (LgGridNumericColumn, LgGridDateColumn, LgGridBooleanColumn, LgGridEnumColumn…), ou LgGridCustomColumn<TColumnValue> à défaut — celle-ci n'a alors pas de filtre.
Utilisation
Démonstration
Essayez ce composant dans le showcase Lagoon.
Texte, filtre par défaut et clic cellule
@inherits LgPage
<LgGridView StateId="orders-text-column" Items="_orders" Title="#OrdersGridTitle">
<Columns Context="item">
<LgGridTextColumn @bind-Value="item.Number"
Title="#OrderNumber"
DefaultFilter="_numberFilter"
OnCellClick="OnNumberCellClickAsync" />
<LgGridTextColumn @bind-Value="item.Comment"
Title="#Comment"
HideContentSelector="i => !i.IsValidated"
CanEditSelector="i => i.IsValidated" />
</Columns>
</LgGridView>
public partial class GridColumnPage : LgPage
{
// Filtre texte initial : ouvre la grille sur les commandes contenant le préfixe recherché.
private readonly TextFilter _numberFilter = new(FilterTextSearchMode.Contains, "CMD", CompareOptions.IgnoreCase);
// Réagit au clic sur la colonne sans activer la sélection de ligne.
private Task OnNumberCellClickAsync(GridViewCellClickEventArgs<OrderRow> args)
{
if (args.Item is OrderRow order)
{
ShowInformation(order.Number);
}
return Task.CompletedTask;
}
}
Entête, filtre et corps personnalisés
HeaderCellContent remplace le contenu d'en-tête, FilterCellContent remplace le filtre intégré et CellContent reçoit le contexte de cellule (cell.Value pour la valeur, cell.Item pour la ligne). Si vous remplacez l'en-tête ou le filtre, vous prenez aussi en charge le comportement associé (tri ou filtrage personnalisé).
@inherits LgPage
<LgGridView StateId="orders-text-templates" Items="_orders" DefaultShowFilters="true" Title="#OrdersGridTitle">
<Columns Context="item">
<LgGridTextColumn @bind-Value="item.Number" Title="#OrderNumber" Key="order-number-custom">
<HeaderCellContent>
<LgIcon IconName="@IconNames.All.Tag" />
#OrderNumber
</HeaderCellContent>
<FilterCellContent Context="filterContext">
<LgIcon IconName="@IconNames.All.Filter" />
</FilterCellContent>
<CellContent Context="cell">
<LgIcon IconName="@IconNames.All.Check2Circle" />
@cell.Value
</CellContent>
</LgGridTextColumn>
</Columns>
</LgGridView>
Sélecteurs par-ligne (rendu direct)
Depuis la 4.0, le fragment <Columns> n'est matérialisé qu'une seule fois (avec un élément modèle) : un paramètre de colonne qui capture la variable de contexte (HideContent="@(!item.IsValidated)") n'est donc plus recalculé par ligne. Pour faire varier un paramètre selon la ligne, posez son sélecteur Func<TItem, …>, appelé pour chaque ligne avec l'item. Ces sélecteurs sont hérités de LgGridBaseColumn et disponibles sur toutes les colonnes.
| Sélecteur | Type | Combinaison avec le paramètre statique |
|---|---|---|
CssClassSelector | Func<TItem, string> | Additif : la classe retournée s'ajoute à CssClass. |
CanEditSelector | Func<TItem, bool> | ET avec CanEdit et la capacité d'édition de la grille. |
HideContentSelector | Func<TItem, bool> | Présence gagne : remplace HideContent quand il est posé. |
DisplayFormatSelector | Func<TItem, string> | Présence gagne (affichage seul ; l'export garde DisplayFormat). |
Les colonnes numériques, date et de commande ajoutent leurs propres sélecteurs sur le même modèle (PrefixSelector/SuffixSelector, MinSelector/MaxSelector, CommandNameSelector/IconNameSelector/CommandTooltipSelector) — voir leur page respective.
@inherits LgPage
<LgGridView StateId="orders-selectors" Items="_orders" Title="#OrdersGridTitle">
<Columns Context="item">
<LgGridTextColumn @bind-Value="item.Comment"
Title="#Comment"
CanEditSelector="i => i.IsValidated"
HideContentSelector="i => !i.IsValidated"
CssClassSelector="GetCommentCssClass" />
</Columns>
</LgGridView>
public partial class GridSelectorsPage : LgPage
{
// Classe CSS par ligne : surligne les commentaires des commandes en retard.
// Le sélecteur est aussi appelé avec "null" pour la cellule de calcul (pied de
// colonne) : on gère donc le cas null pour ne pas lever d'exception.
private string GetCommentCssClass(OrderRow order)
{
return order is not null && order.IsLate ? "text-danger" : null;
}
}
Un sélecteur qui lit l'item est aussi appelé avec item == null pour la cellule de calcul : gérez le null si votre grille affiche une ligne de calcul.
Fournir la valeur, le tri et le filtre par expression
ValueSelector (Expression<Func<TItem, string>> ici) est une alternative à @bind-Value qui ne capture pas le contexte : c'est un fournisseur de valeur complet (lecture, tri, filtre, groupe, export). Un chemin membre simple (row => row.Comment) reste éditable et traduisible en requête distante ; une expression calculée rend la colonne lecture seule et ne fonctionne que sur des données locales. Une colonne déclare soit @bind-Value soit ValueSelector (jamais les deux).
Le tri, le filtre, le regroupement et la pondération ont chacun leur sélecteur d'expression typé, qui active la fonctionnalité et remplace l'API obsolète correspondante :
| Sélecteur | Type | Rôle | Remplace |
|---|---|---|---|
ValueSelector | Expression<Func<TItem, TColumnValue>> | Fournit la valeur (alternative à @bind-Value). | — |
SortSelector | Expression<Func<TItem, object>> | Clé de tri. | SortExpression |
FilterSelector | Expression<Func<TItem, object>> | Clé de filtre. | FilterExpression |
GroupSelector | Expression<Func<TItem, object>> | Clé de regroupement. | GroupExpression |
LambdaSelector | Expression<Func<TItem, object>> | Repli commun tri + filtre + groupe. | LambdaExpression |
WeightSelector | Expression<Func<TItem, object>> | Poids de la moyenne pondérée (CalculationType="Average"). | WeightExpression |
Une clé membre simple (i => i.LastName) se traduit en requête distante : tri et filtre serveur fonctionnent. Une clé calculée (méthode, ternaire, concaténation) ne se traduit pas : le tri/filtre distant est inopérant, mais le tri/filtre local reste actif. Le nœud de boxing object d'une clé de type valeur est retiré automatiquement pour préserver la traduction distante.
@inherits LgPage
<LgGridView StateId="orders-value-selector" Items="_orders" Title="#OrdersGridTitle">
<Columns Context="item">
@* Sans @bind-Value, le type de ligne ne peut plus être inféré : préciser TItem. *@
@* Valeur calculée => colonne en lecture seule, triée en local sur LastName. *@
<LgGridTextColumn TItem="OrderRow"
Title="#CustomerName"
ValueSelector="@(i => string.Join(' ', i.FirstName, i.LastName))"
SortSelector="@(i => i.LastName)" />
</Columns>
</LgGridView>
Filtre
Filtre texte.
Énumérations associées
FilterTextSearchMode
Mode de recherche utilisé par TextFilter pour initialiser DefaultFilter.
| Valeur | Description |
|---|---|
Contains | La valeur contient le texte recherché (valeur par défaut). |
StartsWith | La valeur commence par le texte recherché. |
EndsWith | La valeur se termine par le texte recherché. |
Fiche générée depuis les sources : Référence API — LgGridTextColumn.