Le MainGrid composant est une grille autonome pour afficher les enregistrements Dataverse. Contrairement SubGridà , il ne nécessite pas de parent RecordContext — il charge les enregistrements directement depuis une table ou une vue spécifiée.
Démo live
Un appareil autonome MainGrid au-dessus de la contact table câblé à deux vues personnalisées — Contacts actifs et Mes Contacts. Utilisez le menu déroulant du view-picker pour basculer entre les deux, tapez dans la zone de recherche pour filtrer, cliquez sur un en-tête de colonne pour trier, puis utilisez le pied de page pour feuilleter les résultats. Aucun parent RecordContext n’est nécessaire — la grille charge ses enregistrements directement à partir des vues fournies.
Exemple de réaction
Exemple de Blazor
Tout le monde peut consulter les contacts dans la grille ci-dessous. Connectez-vous pour créer, consulter et mettre à jour vos propres contacts.
Mes contactsTous les contacts
Mes contactsTous les contacts
Taille de la page
102050100
Nom complet
Téléphone mobile
Messagerie électronique
Nom de l’entreprise
Âge
Abagail Miller
(501) 801-9303
Abagail_Miller30@yahoo.com
Lowe Inc
52
Abdul Pollich
(319) 579-4439
Abdul73@yahoo.com
Wiza, Bradtke and Hintz
54
Abel Parisian
(631) 444-9854
Abel84@gmail.com
Raynor - Lakin
32
Abigale Kuvalis
(369) 810-9954
Abigale71@gmail.com
Murazik Group
65
Adell Paucek
(260) 615-0566
Adell99@yahoo.com
Windler, Toy and D'Amore
40
Adella Roob
(535) 638-9390
Adella.Roob88@hotmail.com
Pollich - Kling
39
Adolf Weber
(978) 300-6533
Adolf.Weber10@gmail.com
West Group
20
Adonis Torphy
(842) 804-9308
Adonis_Torphy35@hotmail.com
Mohr and Sons
58
Agustin Goyette
(374) 932-0000
Agustin_Goyette@gmail.com
Lebsack, Homenick and Carter
25
Agustin Rau
(986) 867-9045
Agustin_Rau@gmail.com
Lehner Group
22
React TypeScript
Razor
Chargement par nom de tableau
Réglez le TableName paramètre pour charger automatiquement toutes les vues publiques de cette table. La première vue par défaut est sélectionnée au départ.
React
<MainGrid tableName="contact" />Blazor
<MainGrid TableName="contact" />
Chargement par identifiants de vue
Utilisez ViewIds et DefaultViewId pour contrôler exactement quelles vues sont disponibles et lesquelles sont sélectionnées lors du chargement. Vous pouvez également fournir CustomViewDefinitions un FetchXML en ligne pour définir les vues directement dans le code.
<MainGrid ViewIds="_viewIds"
DefaultViewId="@(new Guid("..."))">
</MainGrid>
@code {
private List<Guid> _viewIds = new List<Guid>
{
new Guid("..."),
new Guid("..."),
};
}
Vues personnalisées avec FetchXML
Utilisez CustomViewDefinitions pour définir des vues avec des requêtes FetchXML personnalisées. Cela est utile pour les vues qui incluent des filtres basés sur l’utilisateur actuel, les entités liées ou d’autres critères dynamiques.
Note
Le Id pour une custom GridViewDefinition doit être un GUID aléatoire unique qui ne correspond pas à une vue Dataverse existante. Si elle correspond à un ID de vue existant, la vue Dataverse aura priorité et la définition personnalisée sera ignorée.
private List<GridViewDefinition> _customViews = new List<GridViewDefinition>
{
new GridViewDefinition
{
Id = new Guid("..."),
TableName = "contact",
DisplayName = "Tous les contacts",
FetchXml = @"<fetch>
<entity name='contact'>
<attribute name='fullname' />
<attribute name='emailaddress1' />
<order attribute='fullname' />
</entity>
</fetch>",
Columns = new List<ViewColumn>
{
new ViewColumn { ColumnName = "fullname", Width = 200 },
new ViewColumn { ColumnName = "emailaddress1", Width = 250 },
}
}
};
Affichage Nom
Réglez DisplayName sur a GridViewDefinition pour fournir une étiquette par défaut à la vue dans le sélecteur déroulant sans nécessiter d’entrée de fichier de localisation. Si une clé de localisation existe en tables.{TableName}.views.{Id}.label, elle a la priorité sur DisplayName. C’est utile pour les vues personnalisées où vous souhaitez un nom lisible immédiatement sans ajouter d’entrée de localisation.
Boutons de la barre d’outils
Il MainGrid supporte les mêmes boutons de barres d’outils que SubGrid. Pour les grilles autonomes, NavigateNewRecordGridButton et NavigateOpenRecordGridButton sont couramment utilisées pour naviguer vers des pages de formulaires séparées. Consultez la documentation Grid Buttons pour une référence complète de tous les boutons disponibles et de leurs options de configuration.
Lorsque l’utilisateur tape dans la boîte de recherche de la grille, la vue configurée est automatiquement reinterrogée avec des conditions de filtre supplémentaires appliquées à chaque colonne éligible à la recherche affichée dans la vue. Les conditions sont associées à la OR logique, donc un enregistrement est inclus si l’une de ses colonnes visibles correspond au terme de recherche. La sémantique de correspondance par défaut diffère selon le type de colonne.
Texte et colonnes de recherche
Les colonnes de texte (champs de chaînes) et les colonnes de recherche (associées au nom principal de l’enregistrement cible) utilisent par défaut un démarrage par recherche. La saisie joh correspond à des valeurs qui commencent par joh — par exemple John ou Johnson. La correspondance est déléguée à l’opérateur de like FetchXML, qui est insensible à la casse dans Dataverse.
Utilisez-les * comme joker pour un jumelage plus flexible. La saisie *hn effectue une correspondance de type contains-style (par Johnexemple , Johnson) ; la correspondance j*n de type correspond à des valeurs où n’importe quel caractère peut apparaître entre le j et ( n par Johnexemple , Joneson). Le joker est converti en joker de % FetchXML au moment de la requête.
Colonnes de choix
Les colonnes de choix (ensembles d’options / listes de sélection) et les colonnes de sélection multiple sont comparées à l’etiquetatte d’affichage localisée de chaque option plutôt qu’à la valeur entière sous-jacente. Les labels sont comparés de manière insensible à la casse et à l’accent dans la culture de l’utilisateur actuel, donc la cafe saisie correspondra à une option étiquetée Café. Lorsque une ou plusieurs étiquettes d’option correspondent, la requête émet une condition FetchXML par rapport aux valeurs correspondantes — une in condition pour les colonnes à sélection unique, ou une contain-values condition pour les colonnes à sélection multiple. Lorsque les étiquettes ne correspondent pas, la colonne n’apporte aucune condition (en gardant le OR filtre compact).
Les colonnes de choix honorent le même * joker que les colonnes de texte : par défaut, la correspondance commence par (taper act correspondances Active), et un ouvrage * passe à contains (taper *act complémentairement correspondance Inactive). Les lignes correspondantes ont la sous-chaîne correspondante surlignée dans la grille, exactement comme les correspondances entre colonnes de texte.
Colonnes numériques et monétaires
Les colonnes numériques — int, big int, décimal, double et money — supportent les opérateurs de comparaison dans le terme de recherche. La boîte de recherche analyse un opérateur initial optionnel et applique l’opérateur de condition FetchXML correspondant :
Les conditions de recherche pour chaque type de colonne sont ajoutées au même OR groupe de filtres, de sorte que le même terme de recherche est évalué simultanément par rapport aux colonnes de texte, aux colonnes de recherche, aux colonnes de choix et aux colonnes numériques. Taper 100 une grille comportant à la fois une colonne de nom et une colonne de montant correspondra aux enregistrements dont le nom commence par100 ou dont le montant est égal à 100. Le filtre de recherche est superposé au-dessus du filtre existant de la vue, de sorte que les contraintes au niveau de la vue (comme un statecode = 0 filtre) sont toujours conservées.
Désactivation de la recherche
Réglé AllowSearch="false" sur la grille pour masquer complètement la barre de recherche. Cela est utile pour les grilles qui ne contiennent qu’un petit ensemble fixe d’enregistrements, ou où le filtrage est géré de l’extérieur (par exemple via une barre d’outils personnalisée).
La grille prend en charge deux stratégies de pagination via le PagingMode paramètre (Blazor) / pagingMode prop (React). Les deux modes utilisent la même vue sous-jacente, FetchXML, tri et recherche — seule la manière dont les lignes sont révélées à l’utilisateur diffère.
Paged (par défaut) — un classique pistage Précédent / Suivant avec un sélecteur de taille de page. Idéal pour des ensembles de résultats plus courts et pour les cas où l’utilisateur souhaite sauter par numéro de page ou partager une page à lien profond dans l’URL.
Virtualize — parchemin infini. Le pied de page du pager est caché, les lignes s’accumulent à mesure que l’utilisateur fait défiler le bas affiché, et la page suivante se récupère automatiquement. Un compteur en lecture seule « Affichant 1-N de M » remplace le pager une fois qu’un total est disponible. C’est idéal pour de longues listes où l’utilisateur scanne plutôt que de naviguer par page.
Inscrivez-vous en réglant le mode de pagination sur la grille :
La même contact grille que la démo principale, mais avec PagingMode="GridPagingMode.Virtualize" (Blazor) / pagingMode={PagingMode.Virtualize} (React) et une taille de morceau plus petite donc le défilement exerce l’accumulateur. Le pied de page du pager a disparu — faites défiler vers le bas pour afficher d’autres pages, et regardez le compteur en haut de la grille se mettre à jour au fur et à mesure que de nouvelles lignes arrivent.
Exemple de réaction
Exemple de Blazor
Tout le monde peut consulter les contacts dans la grille ci-dessous. Connectez-vous pour créer, consulter et mettre à jour vos propres contacts.
Mes contactsTous les contacts
Mes contactsTous les contacts
Taille de la page
102050100
Nom complet
Téléphone mobile
Messagerie électronique
Nom de l’entreprise
Âge
React TypeScript
Razor
Compromis
Pas de passage direct à la page. Le mode virtualisation commence toujours à la première page et avance ; les consommateurs ne peuvent plus passer à la page N. Si vous avez besoin d’une navigation explicite sur les pages, restez sur Paged.
Page n’est pas maintenu. Puisque la position de défilement de l’utilisateur n’est pas un concept de page distincte, PersistedStateQueryParameter la p clé est omis en mode virtualisation. La recherche en vue, tri et (en optant) sélectionnée continue de faire un aller-retour sur l’URL.
La recherche et le tri fonctionnent toujours, mais ils réinitialisent l’accumulateur défilé — changer la vue active, appliquer un nouveau tri ou taper dans la boîte de recherche supprime les lignes chargées et les relance depuis le haut.
Masque le pager / le sélecteur de taille de page. Le sélecteur de taille de page est remplacé par une taille de bloc fixe ; définir la valeur initiale via DefaultItemsPerPage (Blazor) / pageSize (Réagir) pour contrôler combien de lignes sont récupérées par page déclenchée par défilement.
Mode taille complète
Réglé FullSize="true" pour faire s’étendre la grille afin de remplir toute la hauteur de son conteneur parent. C’est utile lorsque la grille est le contenu principal d’une page.
En définissant PersistedStateQueryParameter un nom de paramètre de requête (par exemple "gridState"), la grille reflétera son état interactif dans un seul paramètre URL sous ce nom. Chaque modification menée par l’utilisateur — changer la vue sélectionnée, paginar, redimensionner la taille de la page, cliquer sur les en-têtes de colonne pour trier, ou (s’inscrire) taper dans la boîte de recherche — re-encode l’état et remplace le paramètre URL en place. Lorsque la page est ouverte avec le paramètre présent (favori, lien partagé, rafraîchissement), la grille lit le paramètre lors du premier chargement et restaure tout l’état capturé avant de récupérer les données.
Le paramètre de requête encode un objet JSON compact avec une touche courte par morceau d’état. Les clés sont délibérément abrégées pour garder les URL favorites courtes. Les champs correspondant à leurs valeurs naturelles par défaut sont omis, donc une grille à la page 1 sans tri ni recherche produit une masse bien plus petite qu’une avec les cinq champs remplis.
v — le GUID de la vue sélectionnée (minuscule, trait d’union, sans appareils). Correspond à l’une des ViewIds entrées CustomViewDefinitions / avec lesquelles la grille était configurée.
p — le numéro de page basé sur 1. Omise lorsque l’utilisateur est à la page 1 (par défaut).
ps — le nombre de lignes par page. Reflète la dernière sélection de l’utilisateur dans le menu déroulant de taille de page ; Omise lorsqu’elle correspond à celle de DefaultItemsPerPagela grille.
s — un ensemble ordonné de directives de tri. Chaque entrée a c (nom logique de colonne) et une option d (définie à true pour descendant ; ascendant est le défaut non marqué, donc d omise dans ce cas). L’état vide / non trié omet complètement le champ. Le tri multi-colonnes est conservé dans l’ordre de préséance.
q — le texte actuel de la boîte de recherche. Inclus uniquement lorsque la grille était configurée avec IncludeSearchInPersistedState="true" ET que la boîte a une valeur non vide. Par défaut, car les termes de recherche peuvent être sensibles (par exemple, les noms des clients dans un contexte CRM).
Encodage d’URL
L’état est sérialisé en JSON compact (sans espace blanc) et encodé par URL dans le paramètre de requête. Une grille montrant la page 3 d’une vue de contact, triée par nom de famille ascendant puis créée en descendant, avec la recherche « smith » activée, allait faire circuler la charge utile suivante :
Après l’encodage d’URL, la valeur réelle de la barre d’adresses ressemble à ceci (le framework appelle encodeURIComponent la chaîne JSON avant de l’écrire) :
L’encodeur retire tout champ correspondant à son défaut naturel avant la sérialise. Page 1 élimine p, une liste de tri vide disparaît s, un tri non marqué ascendant disparaît d, et une recherche vide disparaît q. Une grille fraîchement chargée sans interaction utilisateur s’encode en un blob contenant uniquement v et ps — empêchant les URL favorisées de croître pour un état que le consommateur n’a pas touché.
Comportement de l’historique du navigateur
Les changements d’état mettent à jour l’URL avec history.replaceState — ils ne poussent pas les nouvelles entrées vers la pile arrière. Cela signifie que cliquer sur Retour depuis une page de grille revient à la page distincte précédente (l’origine de navigation de l’utilisateur), et non à la combinaison de tri/page précédente. Le compromis est intentionnel : une seule session de grille peut produire des dizaines de changements d’état, et appuyer sur chacun comme entrée de navigation rendrait le bouton Retour pratiquement inutile sur le reste de l’application.
Activation de la persistance de la recherche
Par défaut, le texte de recherche est exclu de l’URL afin que le paramètre soit sûr à partager même lorsque la grille filtre par un terme sensible. Définissez IncludeSearchInPersistedState="true" pour inclure la valeur actuelle de la boîte de recherche dans la charge utile encodée (ajoutée comme champ q ci-dessus). Une fois activée, la recherche devient partie de l’état de favoris — l’utilisateur peut copier l’URL et le destinataire se retrouve sur la même vue : page, tri ET la même combinaison de filtre.
La forme JSON encodée est identique entre les implémentations de la grille Blazor et React — même nom de paramètre, mêmes clés (v / p / ps / s / ), qmême sémantique de valeurs. Un lien produit par une pile est consommable par l’autre, de sorte qu’une organisation qui exécute les deux surfaces (par exemple, un portail React public accompagné d’une application d’administration Blazor interne) peut partager des URL de grille entre elles sans aucune couche de traduction par pile.
Plusieurs grilles sur une même page
Deux grilles sur la même page doivent porter des noms différentsPersistedStateQueryParameter. Chaque grille ne lit et écrit que son propre paramètre, donc réutiliser le même nom ferait en sorte que les deux grilles se disputent le même emplacement d’URL — la dernière écriture l’emporte et l’autre grille perd son état à chaque changement. Une convention typique consiste à nommer le paramètre d’après le rôle de la grille (par contactsState exemple + accountsState).
Grilles multi-tables
A MainGrid peut afficher des vues provenant de différentes tables en incluant les identifiants de vues de plusieurs tables de la ViewIds collection. Lorsque l’utilisateur change de vue, la grille charge automatiquement les données de la bonne table. Utilisez le OnClick rappel sur les boutons de navigation pour définir dynamiquement l’URL en fonction du nom de la table de la vue sélectionnée.
React
<MainGrid
viewIds={viewIds}
customViewDefinitions={customViews}
defaultViewId={ALL_CONTACTS_VIEW_ID}
>
<GridButtons>
<NavigateNewRecordGridButton
url="/contacts/new"
onClick={(ctx) => {
switch (ctx.gridContext.selectedView?.tableName) {
case 'contact': ctx.url = '/contacts/new'; break;
case 'account': ctx.url = '/accounts/new'; break;
default: throw new Error('Table inconnue');
}
}}
/>
<NavigateOpenRecordGridButton
urlFor={(record, ctx) => {
switch (ctx.selectedView?.tableName) {
case 'contact': return `/contacts/edit?id=${record.id}`;
case 'account': return `/accounts/edit?id=${record.id}`;
default: throw new Error('Table inconnue');
}
}}
/>
</GridButtons>
</MainGrid>Blazor
Lorsque c’est vrai, l’utilisateur peut modifier le nombre d’éléments affichés par page.
AllowDownloadForFileColumns
bool
True
Lorsque c’est vrai (par défaut), la grille affiche une icône de téléchargement par ligne au niveau bord arrière des cellules de colonnes de fichiers et d’images. Cliquer dessus diffuse le fichier vers le navigateur de l’utilisateur. Réglez sur false pour supprimer l’icône — par exemple en lecture seule Grilles d’audit où l’exportation de fichiers n’est pas autorisée.
AllowEdit
bool
False
L’option devrait-elle être disponible pour l’utilisateur afin d’activer le montage en ligne pour la grille ?
AllowNavigateOnPrimaryNameClick
bool
True
Lorsque c’est vrai (par défaut) et que la grille possède un bouton « modifier » enregistré (un GridButton avec IsOpenRecordButton=true), la cellule qui affiche la colonne du nom principal du tableau devient un hyperlien. Cliquer dessus envoie la même chose invocation par ligne qu’un double-clic sur ligne ferait — afin qu’un utilisateur puisse passer directement à la modification form (ou l’URL d’édition naviguée, selon le bouton enregistré) sans d’abord Sélectionner la ligne. Régler sur false pour supprimer le lien hypertexte et rendre le cellule de nom primaire en texte clair. Cela n’a aucun effet quand aucun bouton d’édition n’est enregistré.
AllowNavigateOnRowDoubleClick
bool
True
Lorsque c’est vrai (par défaut) et que la grille possède un bouton « modifier » enregistré (un GridButton avec IsOpenRecordButton=true), double-cliquant sur une ligne invoque l’OnClick de ce bouton pour l’enregistrement — ouverture de la ligne la boîte de dialogue d’édition ou la navigation vers l’URL d’édition, selon ce que le bouton utilise. Réglé à faux pour supprimer le gestionnaire de double-clic. Ça n’a aucun effet quand il n’y a pas de bouton d’édition est enregistré.
AllowPreviewForFileColumns
bool
True
Lorsque c’est vrai (par défaut), la grille affiche une icône d’aperçu « œil » par ligne au niveau Bord arrière des cellules de colonnes de fichiers et d’images dont le contenu peut être rendu en ligne (images, PDF, texte brut). Réglez sur false pour supprimer l’icône — par exemple sur des grilles où les colonnes ne devraient pas servir de point d’entrée de prévisualisation.
AllowSearch
bool
True
L’utilisateur devrait-il être autorisé à rechercher dans la grille ?
BorderVisible
bool
True
Contrôle si une bordure visible est rendue autour de la grille.
Buttons
RenderFragment?
Fragment de rendu optionnel utilisé pour définir la barre d’outils de boutons affichée au-dessus de la grille.
Columns
RenderFragment?
Fragment optionnel Components.GridColumns transportant des déclarations consommateurs Components.GridColumn des enfants. Une fois fourni, le réseau bascule vers mode remplacement : seules les colonnes déclarées s’affichent (dans déclaré la projection FetchXML est réécrite pour correspondre, et le La liste de colonnes de la vue sous-jacente est ignorée. null laisse la grille dans son comportement par défaut (générer automatiquement des colonnes à partir de le jeu de colonnes résolu de la vue).
CustomViewDefinitions
List<GridViewDefinition>?
Des vues personnalisées à afficher dans le menu déroulant.
DataSource
ViewDataSource?
Optionnel partagé Data.ViewDataSource. Une fois réglée, la grille lit ses lignes + le nombre total de la source de données au lieu de publiant ses propres RetrieveRecordsAsync(System.String) appel — La même source de données peut piloter un frère ou une sœur <DataverseChart> ou une seconde grille pour qu’ils soient tous Paginar / filtrer / rechercher ensemble sur un aller-retour. L’usage autonome (non GridBase.DataSource) conserve le machine à états internes existante — la grille compose FetchXML et obtiens directement via IPowerPortalsProService . Ce que la source de données ne possède PAS : l’interface utilisateur par grille état (lignes sélectionnées, ligne en attente créée / mise à jour / supprimée, largeurs de colonnes). Celles-ci restent locales en grille — deux grilles partageant une seule La source de données peut toujours avoir une sélection indépendante et par grille modifications en attente. Lorsque ViewDataSource.Highlight est défini (par exemple via un clique sur la tranche de graphique en mode « surbrillance » par filtre croisé), lignes dont La valeur dans la colonne surlignée ne correspond pas visuellement à étouffé via une classe CSS ; Les données de ligne + sélection sont non affecté (le filtre croisé doux est purement stylisé).
DefaultItemsPerPage
int
50
Nombre par défaut d’enregistrements à charger sur une page.
DefaultViewId
Guid?
ID de la vue que la grille doit afficher lors du chargement initial.
Editable
bool
False
Le montage en ligne est-il activé pour la grille.
Filters
IReadOnlyList<GridFilterBase>?
Des filtres côté serveur supplémentaires ET fusionnés dans les vues résolues FetchXML avant de paginar, trier ou chercher se déclenche. Transmis à Query.IFetchXmlQueryComposer's FetchXmlQueryOptions.Filters, Ainsi, chaque entrée est distribuée par type d’exécution (par exemple, Models.RelationshipFilter ET fusionne une entité lien-relation). Utilisation typique : le sélecteur LinkExistingRecordGridGrid transmet un Models.RelationshipFilter avec RelationshipFilterMode.ExcludeExistingRecords Donc déjà— les enregistrements liés sont cachés dans la boîte de dialogue de recherche M2M. Se combine de manière additive avec l’interne propre de SubGrid filtre de relation (qui est intégré directement dans le FetchXML plutôt que de passer par la fente Filtres du compositeur) — les deux extrémités dans la même question.
FullSize
bool
False
Lorsque c’est vrai, la grille s’élargit pour remplir tout l’espace vertical disponible au lieu d’utiliser une hauteur minimale fixe.
HidePaging
bool
False
Forcez la taille de la page et les composants de pagination à être masqués. Ne faites cela que lorsque le nombre d’éléments est connu et que la taille de la page est réglée à un niveau supérieur au nombre d’éléments.
IncludeSearchInPersistedState
bool
False
Lorsque c’est vrai, le texte de recherche active est inclus dans le persisté paramètre URL d’état (sous le champ q ). Par défaut, le faux est — les termes de recherche peuvent être sensibles, s’accumuler dans l’historique du navigateur, et fuient vers les référents HTTP, donc la grille les empêche d’accéder à l’URL sauf si Le consommateur s’inscrit explicitement. Ça n’a aucun effet quand GridBase.PersistedStateQueryParameter n’est pas fixé.
IsDirty
bool
False
Indique si la grille a des opérations de création, mise à jour ou suppression non enregistrées en attente.
LoadedRecords
IEnumerable<TableRecord>
Enregistrements actuellement rendus dans la grille (la page la plus récente des résultats). Destiné aux commandes de barre d’outils qui doivent agir sur « tout ce qui est affiché » — par exemple un bloc Bouton de téléchargement. Il ne s’étend pas sur des pages ; Les opérations de masse à travers les pages devraient exécuter leur À la place, je suis un ballon non pagé à la place.
MaxHeight
string?
Hauteur maximale que le contrôle de la grille devrait atteindre.
MinHeight
string?
300px
Hauteur minimale que devrait occuper le contrôle de la grille.
Mode
GridMode
RecordSelection
Définit le mode comportemental de la grille, comme l’interaction par défaut ou le mode de sélection d’enregistrements.
PageSizes
IEnumerable<int>
Collection des tailles de pages disponibles pour la grille.
PagingMode
GridPagingMode
Paged
Détermine si la grille utilise un paginage traditionnel ou une virtualisation à défilement infini.
PersistedRowsSnapshot
PersistedGridRowsSnapshot?
Le pré-rendu serveur → transfert interactif pour la page de lignes rendue en ligne. Le cadre Cette propriété persiste automatiquement à la fin du pré-rendu et la réhydrate avant GridBase.OnInitializedAsync du côté interactif, donc la récupération de données peut être J’ai sauté le premier rendu interactif. Clé par position de l’arbre de rendu par le framework ; Le PersistedGridRowsSnapshot.ViewId champ est vérifié à la consommation Un retour de rendu contre une autre vue élimine les rangées obsolètes. Public selon le exigence du cadre — [PersistentState] ne voit les propriétés publiques que via réflexion — mais pas destinée à être imposée à l’extérieur.
PersistedStateQueryParameter
string?
Nom du paramètre de la chaîne de requête URL pour maintenir l’interactivité de la grille État. Une fois réglé, la grille lit ce paramètre lors de la charge initiale et seed la vue active, le numéro de page, la taille de la page, et le tri à partir de celle-ci ; Actions ultérieures de l’utilisateur (Vue de la préparation, changement de page, tri d’en-tête, etc.) Écrivez le nouvel état via Components.NavigationManager's Voie de remplacement d’état. La persistance survit au rafraîchissement de la page et aux favoris.
SelectedRecords
IEnumerable<TableRecord>
Les records actuellement sélectionnés dans la grille.
SelectFromEntireRow
bool
True
Lorsque c’est vrai, cliquer n’importe où sur une ligne la sélectionne ; En cas de faux, seule la case à cocher sélectionne la ligne.
SelectMode
DataGridSelectMode
Multiple
Contrôle si la grille permet la sélection d’une ou plusieurs lignes.
TableName
string?
Le nom logique du tableau dont les vues publiques devraient être chargées. Applicable uniquement lorsqu’aucune valeur n’est spécifiée pour GridBase.DefaultViewId ou GridBase.ViewIds.
Title
string?
Nom à afficher lorsque le menu déroulant de la vue n’est pas affiché.
Rappel optionnel qui s’exécute immédiatement après le chargement d’une vue et avant que la grille ne soit utilisée C’est pour construire des colonnes ou des requêtes. Retourner un modifié Models.GridViewDefinition à Transformer ce que la grille rend finalement — par exemple, pour garantir une colonne spécifique est toujours présent, quelle que soit la configuration propre à la vue. Asynchrone pour que les appelants puissent Consultez les caches de métadonnées, les services ou d’autres ressources ASYNC lors de la décision de quoi choisir inclure.
ViewIds
IEnumerable<Guid>?
Liste des identifiants des vues auxquelles la grille doit se limiter dans le menu déroulant des vues.
ViewSort
ViewSort
NameAscending
Classez les vues dans le menu déroulant des vues.
Nom:AllowChangingPageSize
Type:bool
Par défaut:True
Description:Lorsque c’est vrai, l’utilisateur peut modifier le nombre d’éléments affichés par page.
Nom:AllowDownloadForFileColumns
Type:bool
Par défaut:True
Description:Lorsque c’est vrai (par défaut), la grille affiche une icône de téléchargement par ligne au niveau bord arrière des cellules de colonnes de fichiers et d’images. Cliquer dessus diffuse le fichier vers le navigateur de l’utilisateur. Réglez sur false pour supprimer l’icône — par exemple en lecture seule Grilles d’audit où l’exportation de fichiers n’est pas autorisée.
Nom:AllowEdit
Type:bool
Par défaut:False
Description:L’option devrait-elle être disponible pour l’utilisateur afin d’activer le montage en ligne pour la grille ?
Nom:AllowNavigateOnPrimaryNameClick
Type:bool
Par défaut:True
Description:Lorsque c’est vrai (par défaut) et que la grille possède un bouton « modifier » enregistré (un GridButton avec IsOpenRecordButton=true), la cellule qui affiche la colonne du nom principal du tableau devient un hyperlien. Cliquer dessus envoie la même chose invocation par ligne qu’un double-clic sur ligne ferait — afin qu’un utilisateur puisse passer directement à la modification form (ou l’URL d’édition naviguée, selon le bouton enregistré) sans d’abord Sélectionner la ligne. Régler sur false pour supprimer le lien hypertexte et rendre le cellule de nom primaire en texte clair. Cela n’a aucun effet quand aucun bouton d’édition n’est enregistré.
Nom:AllowNavigateOnRowDoubleClick
Type:bool
Par défaut:True
Description:Lorsque c’est vrai (par défaut) et que la grille possède un bouton « modifier » enregistré (un GridButton avec IsOpenRecordButton=true), double-cliquant sur une ligne invoque l’OnClick de ce bouton pour l’enregistrement — ouverture de la ligne la boîte de dialogue d’édition ou la navigation vers l’URL d’édition, selon ce que le bouton utilise. Réglé à faux pour supprimer le gestionnaire de double-clic. Ça n’a aucun effet quand il n’y a pas de bouton d’édition est enregistré.
Nom:AllowPreviewForFileColumns
Type:bool
Par défaut:True
Description:Lorsque c’est vrai (par défaut), la grille affiche une icône d’aperçu « œil » par ligne au niveau Bord arrière des cellules de colonnes de fichiers et d’images dont le contenu peut être rendu en ligne (images, PDF, texte brut). Réglez sur false pour supprimer l’icône — par exemple sur des grilles où les colonnes ne devraient pas servir de point d’entrée de prévisualisation.
Nom:AllowSearch
Type:bool
Par défaut:True
Description:L’utilisateur devrait-il être autorisé à rechercher dans la grille ?
Nom:BorderVisible
Type:bool
Par défaut:True
Description:Contrôle si une bordure visible est rendue autour de la grille.
Nom:Buttons
Type:RenderFragment?
Description:Fragment de rendu optionnel utilisé pour définir la barre d’outils de boutons affichée au-dessus de la grille.
Nom:Columns
Type:RenderFragment?
Description:Fragment optionnel Components.GridColumns transportant des déclarations consommateurs Components.GridColumn des enfants. Une fois fourni, le réseau bascule vers mode remplacement : seules les colonnes déclarées s’affichent (dans déclaré la projection FetchXML est réécrite pour correspondre, et le La liste de colonnes de la vue sous-jacente est ignorée. null laisse la grille dans son comportement par défaut (générer automatiquement des colonnes à partir de le jeu de colonnes résolu de la vue).
Nom:CustomViewDefinitions
Type:List<GridViewDefinition>?
Description:Des vues personnalisées à afficher dans le menu déroulant.
Nom:DataSource
Type:ViewDataSource?
Description:Optionnel partagé Data.ViewDataSource. Une fois réglée, la grille lit ses lignes + le nombre total de la source de données au lieu de publiant ses propres RetrieveRecordsAsync(System.String) appel — La même source de données peut piloter un frère ou une sœur <DataverseChart> ou une seconde grille pour qu’ils soient tous Paginar / filtrer / rechercher ensemble sur un aller-retour. L’usage autonome (non GridBase.DataSource) conserve le machine à états internes existante — la grille compose FetchXML et obtiens directement via IPowerPortalsProService . Ce que la source de données ne possède PAS : l’interface utilisateur par grille état (lignes sélectionnées, ligne en attente créée / mise à jour / supprimée, largeurs de colonnes). Celles-ci restent locales en grille — deux grilles partageant une seule La source de données peut toujours avoir une sélection indépendante et par grille modifications en attente. Lorsque ViewDataSource.Highlight est défini (par exemple via un clique sur la tranche de graphique en mode « surbrillance » par filtre croisé), lignes dont La valeur dans la colonne surlignée ne correspond pas visuellement à étouffé via une classe CSS ; Les données de ligne + sélection sont non affecté (le filtre croisé doux est purement stylisé).
Nom:DefaultItemsPerPage
Type:int
Par défaut:50
Description:Nombre par défaut d’enregistrements à charger sur une page.
Nom:DefaultViewId
Type:Guid?
Description:ID de la vue que la grille doit afficher lors du chargement initial.
Nom:Editable
Type:bool
Par défaut:False
Description:Le montage en ligne est-il activé pour la grille.
Nom:Filters
Type:IReadOnlyList<GridFilterBase>?
Description:Des filtres côté serveur supplémentaires ET fusionnés dans les vues résolues FetchXML avant de paginar, trier ou chercher se déclenche. Transmis à Query.IFetchXmlQueryComposer's FetchXmlQueryOptions.Filters, Ainsi, chaque entrée est distribuée par type d’exécution (par exemple, Models.RelationshipFilter ET fusionne une entité lien-relation). Utilisation typique : le sélecteur LinkExistingRecordGridGrid transmet un Models.RelationshipFilter avec RelationshipFilterMode.ExcludeExistingRecords Donc déjà— les enregistrements liés sont cachés dans la boîte de dialogue de recherche M2M. Se combine de manière additive avec l’interne propre de SubGrid filtre de relation (qui est intégré directement dans le FetchXML plutôt que de passer par la fente Filtres du compositeur) — les deux extrémités dans la même question.
Nom:FullSize
Type:bool
Par défaut:False
Description:Lorsque c’est vrai, la grille s’élargit pour remplir tout l’espace vertical disponible au lieu d’utiliser une hauteur minimale fixe.
Nom:HidePaging
Type:bool
Par défaut:False
Description:Forcez la taille de la page et les composants de pagination à être masqués. Ne faites cela que lorsque le nombre d’éléments est connu et que la taille de la page est réglée à un niveau supérieur au nombre d’éléments.
Nom:IncludeSearchInPersistedState
Type:bool
Par défaut:False
Description:Lorsque c’est vrai, le texte de recherche active est inclus dans le persisté paramètre URL d’état (sous le champ q ). Par défaut, le faux est — les termes de recherche peuvent être sensibles, s’accumuler dans l’historique du navigateur, et fuient vers les référents HTTP, donc la grille les empêche d’accéder à l’URL sauf si Le consommateur s’inscrit explicitement. Ça n’a aucun effet quand GridBase.PersistedStateQueryParameter n’est pas fixé.
Nom:IsDirty
Type:bool
Par défaut:False
Description:Indique si la grille a des opérations de création, mise à jour ou suppression non enregistrées en attente.
Nom:LoadedRecords
Type:IEnumerable<TableRecord>
Description:Enregistrements actuellement rendus dans la grille (la page la plus récente des résultats). Destiné aux commandes de barre d’outils qui doivent agir sur « tout ce qui est affiché » — par exemple un bloc Bouton de téléchargement. Il ne s’étend pas sur des pages ; Les opérations de masse à travers les pages devraient exécuter leur À la place, je suis un ballon non pagé à la place.
Nom:MaxHeight
Type:string?
Description:Hauteur maximale que le contrôle de la grille devrait atteindre.
Nom:MinHeight
Type:string?
Par défaut:300px
Description:Hauteur minimale que devrait occuper le contrôle de la grille.
Nom:Mode
Type:GridMode
Par défaut:RecordSelection
Description:Définit le mode comportemental de la grille, comme l’interaction par défaut ou le mode de sélection d’enregistrements.
Nom:PageSizes
Type:IEnumerable<int>
Description:Collection des tailles de pages disponibles pour la grille.
Nom:PagingMode
Type:GridPagingMode
Par défaut:Paged
Description:Détermine si la grille utilise un paginage traditionnel ou une virtualisation à défilement infini.
Nom:PersistedRowsSnapshot
Type:PersistedGridRowsSnapshot?
Description:Le pré-rendu serveur → transfert interactif pour la page de lignes rendue en ligne. Le cadre Cette propriété persiste automatiquement à la fin du pré-rendu et la réhydrate avant GridBase.OnInitializedAsync du côté interactif, donc la récupération de données peut être J’ai sauté le premier rendu interactif. Clé par position de l’arbre de rendu par le framework ; Le PersistedGridRowsSnapshot.ViewId champ est vérifié à la consommation Un retour de rendu contre une autre vue élimine les rangées obsolètes. Public selon le exigence du cadre — [PersistentState] ne voit les propriétés publiques que via réflexion — mais pas destinée à être imposée à l’extérieur.
Nom:PersistedStateQueryParameter
Type:string?
Description:Nom du paramètre de la chaîne de requête URL pour maintenir l’interactivité de la grille État. Une fois réglé, la grille lit ce paramètre lors de la charge initiale et seed la vue active, le numéro de page, la taille de la page, et le tri à partir de celle-ci ; Actions ultérieures de l’utilisateur (Vue de la préparation, changement de page, tri d’en-tête, etc.) Écrivez le nouvel état via Components.NavigationManager's Voie de remplacement d’état. La persistance survit au rafraîchissement de la page et aux favoris.
Nom:SelectedRecords
Type:IEnumerable<TableRecord>
Description:Les records actuellement sélectionnés dans la grille.
Nom:SelectFromEntireRow
Type:bool
Par défaut:True
Description:Lorsque c’est vrai, cliquer n’importe où sur une ligne la sélectionne ; En cas de faux, seule la case à cocher sélectionne la ligne.
Nom:SelectMode
Type:DataGridSelectMode
Par défaut:Multiple
Description:Contrôle si la grille permet la sélection d’une ou plusieurs lignes.
Nom:TableName
Type:string?
Description:Le nom logique du tableau dont les vues publiques devraient être chargées. Applicable uniquement lorsqu’aucune valeur n’est spécifiée pour GridBase.DefaultViewId ou GridBase.ViewIds.
Nom:Title
Type:string?
Description:Nom à afficher lorsque le menu déroulant de la vue n’est pas affiché.
Description:Rappel optionnel qui s’exécute immédiatement après le chargement d’une vue et avant que la grille ne soit utilisée C’est pour construire des colonnes ou des requêtes. Retourner un modifié Models.GridViewDefinition à Transformer ce que la grille rend finalement — par exemple, pour garantir une colonne spécifique est toujours présent, quelle que soit la configuration propre à la vue. Asynchrone pour que les appelants puissent Consultez les caches de métadonnées, les services ou d’autres ressources ASYNC lors de la décision de quoi choisir inclure.
Nom:ViewIds
Type:IEnumerable<Guid>?
Description:Liste des identifiants des vues auxquelles la grille doit se limiter dans le menu déroulant des vues.
Nom:ViewSort
Type:ViewSort
Par défaut:NameAscending
Description:Classez les vues dans le menu déroulant des vues.
Événements
Nom
Type
Description
EditableChanged
EventCallback<bool>
Rappel invoqué lorsque l’état de l’édition en ligne change.
SelectedRecordsChanged
EventCallback<IEnumerable<TableRecord>>
Rappel invoqué lorsque la collection de documents sélectionnés change.
Nom:EditableChanged
Type:EventCallback<bool>
Description:Rappel invoqué lorsque l’état de l’édition en ligne change.
Nom:SelectedRecordsChanged
Type:EventCallback<IEnumerable<TableRecord>>
Description:Rappel invoqué lorsque la collection de documents sélectionnés change.
Méthodes
Nom
Paramètres
Type
Description
ClearSelectionAsync
Task
Efface toutes les lignes actuellement sélectionnées.
OpenFileDownloadAsync
TableRecord record string columnName
Task
Récupère les octets de la colonne du fichier/image et record les diffuse en flux vers le navigateur de l’utilisateur en téléchargement. Invoqué par l’icône de téléchargement par ligne dans le fichier et des cellules d’image.
OpenFilePreviewAsync
TableRecord record string columnName
Task
Ouvre la boîte de dialogue d’aperçu en ligne pour la colonne columnName fichier/image sur record. Invoqué par l’icône d’aperçu par ligne dans les cellules de fichier/image et également disponible pour composer des composants (par exemple, un bouton de barre d’outils sur un wrapping Grid) qui souhaitent un point d’entrée programmatique.
RefreshAsync
bool forceRefresh
Task
Demande à la grille de récupérer et de rendre les données courantes de la source de données fournie.
Validate
bool
Valide toutes les lignes modifiables de la grille.
Nom:ClearSelectionAsync
Type:Task
Description:Efface toutes les lignes actuellement sélectionnées.
Nom:OpenFileDownloadAsync
Paramètres:TableRecord record string columnName
Type:Task
Description:Récupère les octets de la colonne du fichier/image et record les diffuse en flux vers le navigateur de l’utilisateur en téléchargement. Invoqué par l’icône de téléchargement par ligne dans le fichier et des cellules d’image.
Nom:OpenFilePreviewAsync
Paramètres:TableRecord record string columnName
Type:Task
Description:Ouvre la boîte de dialogue d’aperçu en ligne pour la colonne columnName fichier/image sur record. Invoqué par l’icône d’aperçu par ligne dans les cellules de fichier/image et également disponible pour composer des composants (par exemple, un bouton de barre d’outils sur un wrapping Grid) qui souhaitent un point d’entrée programmatique.
Nom:RefreshAsync
Paramètres:bool forceRefresh
Type:Task
Description:Demande à la grille de récupérer et de rendre les données courantes de la source de données fournie.
Nom:Validate
Type:bool
Description:Valide toutes les lignes modifiables de la grille.
GridViewDefinition Classe
Propriétés
Nom
Type
Par défaut
Description
Columns
List<ViewColumn>
Les colonnes affichées dans la grille, y compris leurs noms logiques et leurs largeurs de pixels.
DisplayName
string?
Nom d’affichage optionnel pour cette vue. Une fois réglé, cela est utilisé comme étiquette par défaut dans le Menu déroulant du sélecteur de vision. Une entrée de localisation à Tables. {NomDeTable}.vues. {Id}.label a la priorité si elle existe.
FetchXml
string
La requête FetchXML qui définit quels enregistrements et colonnes sont récupérés pour cette vue.
TableName
string
Le nom logique de la table Dataverse est cette requête.
Nom:Columns
Type:List<ViewColumn>
Description:Les colonnes affichées dans la grille, y compris leurs noms logiques et leurs largeurs de pixels.
Nom:DisplayName
Type:string?
Description:Nom d’affichage optionnel pour cette vue. Une fois réglé, cela est utilisé comme étiquette par défaut dans le Menu déroulant du sélecteur de vision. Une entrée de localisation à Tables. {NomDeTable}.vues. {Id}.label a la priorité si elle existe.
Nom:FetchXml
Type:string
Description:La requête FetchXML qui définit quels enregistrements et colonnes sont récupérés pour cette vue.
Nom:TableName
Type:string
Description:Le nom logique de la table Dataverse est cette requête.
Default RecordSelection
Paged Virtualize
Single SingleSticky Multiple
Default NameAscending NameDescending
Apply commence par un filtre sur les colonnes suivantes :
Messagerie électronique Nom complet Nom de l’entreprise Téléphone mobile
Apply commence par un filtre sur les colonnes suivantes :
Messagerie électronique Nom complet Nom de l’entreprise Téléphone mobile
Apply commence par un filtre sur les colonnes suivantes :
Messagerie électronique Nom complet Nom de l’entreprise Téléphone mobile
Utilise des comparaisons de nombres sur les colonnes suivantes :
Âge
Apply commence par un filtre sur les colonnes suivantes :
Messagerie électronique Nom complet Nom de l’entreprise Téléphone mobile
Utilise des comparaisons de nombres sur les colonnes suivantes :