Aller au contenu principal

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
Valeur non textuelle

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​

GridColumnPage.razor
@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>
GridColumnPage.razor.cs
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é).

GridColumnTemplatesPage.razor
@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électeurTypeCombinaison avec le paramètre statique
CssClassSelectorFunc<TItem, string>Additif : la classe retournée s'ajoute à CssClass.
CanEditSelectorFunc<TItem, bool>ET avec CanEdit et la capacité d'édition de la grille.
HideContentSelectorFunc<TItem, bool>Présence gagne : remplace HideContent quand il est posé.
DisplayFormatSelectorFunc<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.

GridSelectorsPage.razor
@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>
GridSelectorsPage.razor.cs
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;
}
}
Ligne de calcul

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électeurTypeRôleRemplace
ValueSelectorExpression<Func<TItem, TColumnValue>>Fournit la valeur (alternative à @bind-Value).—
SortSelectorExpression<Func<TItem, object>>Clé de tri.SortExpression
FilterSelectorExpression<Func<TItem, object>>Clé de filtre.FilterExpression
GroupSelectorExpression<Func<TItem, object>>Clé de regroupement.GroupExpression
LambdaSelectorExpression<Func<TItem, object>>Repli commun tri + filtre + groupe.LambdaExpression
WeightSelectorExpression<Func<TItem, object>>Poids de la moyenne pondérée (CalculationType="Average").WeightExpression
Distant (OData) vs local

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.

GridValueSelectorPage.razor
@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.

ValeurDescription
ContainsLa valeur contient le texte recherché (valeur par défaut).
StartsWithLa valeur commence par le texte recherché.
EndsWithLa valeur se termine par le texte recherché.
Référence complète

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

Composants liés​