MainGrid

Die Komponente MainGrid ist ein eigenständiges Raster zur Darstellung von Dataverse-Datensätzen. Im Gegensatz zu SubGridbenötigt sie keinen Elternteil RecordContext – sie lädt Datensätze direkt aus einer bestimmten Tabelle oder Ansicht.

Live-Demo

Ein eigenständiger MainGrid Stand über dem contact Tabellen, der mit zwei benutzerdefinierten Ansichten verbunden ist – Aktive Kontakte und Meine Kontakte. Nutzen Sie das Dropdown-Menü für den View-Picker, um zwischen ihnen zu wechseln, geben Sie das Suchfeld zum Filtern ein, klicken Sie auf eine Spaltenüberschrift zum Sortieren und nutzen Sie den Fußer, um die Ergebnisse durchzublättern. Es ist kein Elternteil RecordContext erforderlich – das Grid lädt seine Datensätze direkt aus den bereitgestellten Ansichten.

React-Beispiel
Blazor-Beispiel
Jeder kann die Kontakte im untenstehenden Raster einsehen. Melden Sie sich an, um Ihre eigenen Kontakte zu erstellen, anzusehen und zu aktualisieren.
Alle KontakteMeine Kontakte
Alle KontakteMeine Kontakte

Seitengröße

102050100
Vollständiger Name
Mobiltelefon
E-Mail
Firmenname
Alter
Abagail Miller(501) 801-9303Abagail_Miller30@yahoo.comLowe Inc52
Abdul Pollich(319) 579-4439Abdul73@yahoo.comWiza, Bradtke and Hintz54
Abel Parisian(631) 444-9854Abel84@gmail.comRaynor - Lakin32
Abigale Kuvalis(369) 810-9954Abigale71@gmail.comMurazik Group65
Adell Paucek(260) 615-0566Adell99@yahoo.comWindler, Toy and D'Amore40
Adella Roob(535) 638-9390Adella.Roob88@hotmail.comPollich - Kling39
Adolf Weber(978) 300-6533Adolf.Weber10@gmail.comWest Group20
Adonis Torphy(842) 804-9308Adonis_Torphy35@hotmail.comMohr and Sons58
Agustin Goyette(374) 932-0000Agustin_Goyette@gmail.comLebsack, Homenick and Carter25
Agustin Rau(986) 867-9045Agustin_Rau@gmail.comLehner Group22
React TypeScript
Razor

Laden nach Tabellennamen

Stellen Sie den Parameter TableName so ein, dass alle öffentlichen Ansichten für diese Tabelle automatisch geladen werden. Die erste Standardansicht wird zunächst ausgewählt.

React
Blazor

Laden nach View-IDs

Verwenden ViewIds Sie und DefaultViewId steuern Sie genau, welche Ansichten verfügbar sind und welche beim Laden ausgewählt wird. Sie können auch Inline-FetchXML bereitstellen CustomViewDefinitions , um Ansichten direkt im Code zu definieren.

React
Blazor

Benutzerdefinierte Ansichten mit FetchXML

Verwenden CustomViewDefinitions Sie, um Ansichten mit benutzerdefinierten FetchXML-Abfragen zu definieren. Dies ist nützlich für Ansichten, die Filter basierend auf dem aktuellen Nutzer, verknüpften Entitäten oder anderen dynamischen Kriterien enthalten.

Anmerkung

Das Id für eine benutzerdefinierte Ansicht GridViewDefinition muss ein eindeutiger zufälliger GUID sein, der nicht einer bestehenden Dataverse-Ansicht entspricht. Wenn sie mit einer bestehenden Ansichts-ID übereinstimmt, hat die Dataverse-Ansicht Vorrang und die benutzerdefinierte Definition wird ignoriert.

React
Blazor

DisplayName

Auf a GridViewDefinition eingestelltDisplayName, um im Dropdown-Menü eine Standardbezeichnung für die Ansicht bereitzustellen, ohne dass ein Lokalisierungsdateieintrag erforderlich ist. Wenn ein Lokalisierungsschlüssel bei tables.{TableName}.views.{Id}.labelexistiert, hat er Vorrang vor DisplayName. Das ist nützlich für benutzerdefinierte Ansichten, bei denen man sofort einen lesbaren Namen möchte, ohne einen Lokalisierungseintrag hinzuzufügen.

Werkzeugleisten-Buttons

Unterstützt MainGrid die gleichen Symbolleisten-Buttons wie SubGrid. Für eigenständige Raster und NavigateOpenRecordGridButton werden häufig verwendet, NavigateNewRecordGridButton um zu separaten Formularseiten zu navigieren. Siehe die Dokumentation zu den Grid Buttons für eine vollständige Referenz aller verfügbaren Buttons und ihrer Konfigurationsoptionen.

React
Blazor

Suchbox-Verhalten

Wenn der Benutzer in das Suchfeld des Rasters eingibt, wird die konfigurierte Ansicht automatisch erneut abgerufen, wobei zusätzliche Filterbedingungen auf jede suchberechtigte Spalte angewendet werden, die in der Ansicht angezeigt wird. Die Bedingungen sind mit OR der Logik verbunden, sodass ein Datensatz enthalten ist, wenn eine seiner sichtbaren Spalten mit dem Suchbegriff übereinstimmt. Die Standardübereinstimmung variiert je nach Spaltentyp.

Text- und Nachschlagspalten

Textspalten (Zeichenkettenfelder) und Nachschlagespalten (abgeglichene mit dem primären Namen des Zieldatensatzes) verwenden standardmäßig eine Start-mit-Suche . Die Eingabe stimmt Werten joh ab, die mit joh — zum Beispiel John oder Johnsonbeginnen. Das Match wird an den like Operatoren von FetchXML delegiert, der in Dataverse als Groß- und Kleinschreibungsunempfindlich gilt.

Nutze sie * als Wildcard für flexiblere Matching. Das Typisieren *hn führt einen Contains-Stil Match aus (z. B. John, Johnson); Typing übereinstimmt Werte j*n , bei denen beliebige Zeichen zwischen der j und der n (z. B. John, Joneson) erscheinen können. Die Joker wird zur Abfragezeit in die % Joker von FetchXML umgewandelt.

Auswahlspalten

Auswahlspalten (Optionssets / Auswahllisten) und Mehrfachauswahl-Spalten werden mit dem lokalisierten Anzeigelabel jeder Option abgeglichen, anstatt mit dem zugrundeliegenden Ganzzahlwert. Labels werden in der Kultur des aktuellen Nutzers mit Kasus und Akzent unempfindlich verglichen, sodass das Tippen cafe mit einer Option namens Café. Wenn eine oder mehrere Optionslabels übereinstimmen, sendet die Abfrage eine FetchXML-Bedingung gegen die übereinanderstimmenden Optionswerte – eine in Bedingung für Einzelauswahl-Spalten oder eine contain-values Bedingung für Mehrfachauswahl-Spalten. Wenn keine Labels übereinstimmen, trägt die Spalte keine Bedingung bei (wodurch der Filter OR kompakt bleibt).

Auswahlspalten respektieren denselben * Joker wie Textspalten: Standardmäßig beginnt das Match mit (tippt act übereinander Active), und ein anführendes * Symbol wechselt zu contains (tippen *act zusätzlich stimmt überein). Inactive Passende Zeilen haben die passende Teilzeichenkette im Raster markiert, genau wie Text-Spalten-Übereinstimmungen.

Numerische und Geld-Spalten

Numerische Spalten – int, big int, dezimal, doppelt und money – unterstützen Vergleichsoperatoren im Suchbegriff. Das Suchfeld analysiert einen optionalen führenden Operator und wendet den entsprechenden FetchXML-Bedingungsoperator an:

  • = 100 oder einfach 100  — gleich  (der Standard, wenn kein Operator angegeben ist)
  • > 100  —  größer als
  • < 100  —  weniger als
  • >= 100  —  größer als oder gleich
  • <= 100  —  kleiner als oder gleich

Anmerkung

Suchbedingungen für jeden Spaltentyp werden derselben OR Filtergruppe hinzugefügt, sodass derselbe Suchbegriff gleichzeitig gegen Textspalten, Nachschlagespalten, Auswahlspalten und numerische Spalten ausgewertet wird. Das Eingeben 100 eines Rasters, das sowohl eine Namens- als auch eine Zahlenspalte enthält, wird Einträge abgestimmt, deren Name mit 100 100 beginnt oder deren Betrag 100 entspricht. Der Suchfilter wird über den vorhandenen Filter der Ansicht gelegt, sodass Ansichtsebene-Einschränkungen (wie ein statecode = 0 Filter) immer erhalten bleiben.

Suche deaktivieren

Auf dem Raster eingestellt AllowSearch="false" , um das Suchfeld komplett zu verbergen. Dies ist nützlich für Raster, die nur eine kleine feste Anzahl von Datensätzen enthalten oder bei denen das Filtern extern durchgeführt wird (zum Beispiel über eine benutzerdefinierte Werkzeugleiste).

React
Blazor

Paging-Modus

Das Gitter unterstützt zwei Paging-Strategien über den Parameter PagingMode (Blazor) / pagingMode Prop (React). Beide Modi verwenden dieselbe zugrundeliegende Ansicht, FetchXML, Sortieren und Suche – nur die Art und Weise, wie Zeilen dem Benutzer offenbart werden, unterscheidet sich.

  • Paged (Standard) — ein klassischer Prev / Next Footer mit Seitengrößenauswahl. Am besten für kürzere Ergebnissets und für Fälle, in denen der Nutzer nach Seitenzahl wechseln oder eine tief verlinkte Seite in der URL teilen möchte.
  • Virtualizeunendliche Schriftrolle. Der Pager-Fußer ist versteckt, Zeilen sammeln sich, wenn der Benutzer am gerenderten Untergrund vorbeiscrollt, und die nächste Seite wird automatisch geholt. Ein schreibgeschützter "Zeigt 1-N von M"-Zähler ersetzt den Pager, sobald eine Gesamtzahl verfügbar ist. Am besten für lange Listen, bei denen der Nutzer scannt statt nach Seite zu navigieren.

Melden Sie sich an, indem Sie den Paging-Modus auf dem Raster einstellen:

React
Blazor

Live-Demo – Virtualizierungsmodus

Dasselbe contact Raster wie die Hauptdemo, aber mit PagingMode="GridPagingMode.Virtualize" (Blazor) / pagingMode={PagingMode.Virtualize} (React) und einem kleineren Chunk, sodass das Scrollen den Akkumulator ausübt. Der Pager-Fußer ist verschwunden – scrolle nach unten, um weitere Seiten hereinzuziehen, und beobachte, wie sich der Zähler oben im Raster aktualisiert, wenn mehr Reihen einströmen.

React-Beispiel
Blazor-Beispiel
Jeder kann die Kontakte im untenstehenden Raster einsehen. Melden Sie sich an, um Ihre eigenen Kontakte zu erstellen, anzusehen und zu aktualisieren.
Alle KontakteMeine Kontakte
Alle KontakteMeine Kontakte

Seitengröße

102050100
Vollständiger Name
Mobiltelefon
E-Mail
Firmenname
Alter
React TypeScript
Razor

Kompromisse

  • Kein Seitensprung. Der Virtualisierungsmodus beginnt immer auf der ersten Seite und zieht vorwärts; Verbraucher können nicht mehr zu Seite N springen. Wenn du eine explizite Seitennavigation brauchst, bleib auf Paged.
  • Die Seite ist nicht persistiert. Da die Scrollposition des Benutzers kein diskretes Seitenkonzept ist, PersistedStateQueryParameter lässt der p Schlüssel im Virtualisierungsmodus weg. Ausgewählte Ansicht, Sortieren und (Opt-in) Suche laufen weiterhin rundweg durch die URL.
  • Suchen und Sortieren funktionieren weiterhin, aber sie setzen den eingerollten Akkumulator zurück – wenn die aktive Ansicht geändert wird, eine neue Sortierung angewendet oder in das Suchfeld getippt wird, werden die geladenen Zeilen entfernt und von oben erneut abgerufen.
  • Verbirgt den Pager / Seitengrößenwahlschalter. Der Seitengrößenwahler wird durch eine feste Chunk-Größe ersetzt; Setzen Sie den Anfangswert über DefaultItemsPerPage (Blazor) / pageSize (React), um zu steuern, wie viele Zeilen pro scroll-ausgelöster Seite abgerufen werden.

Full-Size-Modus

Stellen Sie ein, FullSize="true" dass das Gitter sich ausdehnt und die volle Höhe seines Elterncontainers ausfüllt. Das ist nützlich, wenn das Raster der Hauptinhalt einer Seite ist.

React
Blazor

Persistierender Gitterzustand

Setzt PersistedStateQueryParameter man auf einen Abfrageparameternamen (z. B. "gridState") und das Raster spiegelt seinen interaktiven Zustand in einen einzigen URL-Parameter unter diesem Namen wider. Jede benutzergesteuerte Änderung – das Wechseln der ausgewählten Ansicht, das Ausrufen, das Anpassen der Seitengröße, das Klicken auf Spaltenüberschriften zum Sortieren oder das (Opt-in) Eingabe in das Suchfeld – kodiert den Zustand neu und ersetzt den URL-Parameter. Wenn die Seite mit dem vorhandenen Parameter geöffnet wird (Lesezeichen, geteilter Link, Aktualisierung), liest das Raster den Parameter beim ersten Laden und stellt den gesamten erfassten Zustand wieder her, bevor die Daten abgerufen werden.

React
Blazor

Was bleibt bestehen

Der Abfrageparameter kodiert ein kompaktes JSON-Objekt mit einem kurzen Schlüssel pro Zustandsstück. Schlüssel werden absichtlich abgekürzt, um die Lesezeichen der URLs kurz zu halten. Felder, die ihren natürlichen Standardwerten entsprechen, werden weggelassen, sodass ein Raster auf Seite 1 ohne Sortierung und ohne Suche einen viel kleineren Blob erzeugt als eines, in dem alle fünf Felder ausgefüllt sind.

  • v— das GUID der ausgewählten Ansicht (Kleinbuchstaben, mit Bindestrich, ohne Klammern). Stimmt mit einem der / CustomViewDefinitions Einträge überein, mit denen ViewIds das Raster konfiguriert wurde.
  • p — die 1-basierte Seitenzahl. Weggelassen, wenn der Nutzer auf Seite 1 ist (der Standard).
  • ps— die Anzahl der Zeilen pro Seite. Spiegelt die letzte Auswahl des Nutzers im Dropdown-Menü zur Seitengröße wider; weggelassen, wenn es mit dem Raster übereinstimmt.DefaultItemsPerPage
  • s – ein geordnetes Array von Sort-Direktiven. Jeder Eintrag hat c (logischer Spaltenname) und eine optionale d (gesetzt auf true absteigend; aufsteigend ist der unmarkierte Standardwert und d wird in diesem Fall weggelassen). Leerer / unsortierter Zustand lässt das Feld komplett weg. Die Mehrspaltensortierung bleibt in der Vorrangreihenfolge erhalten.
  • q — der aktuelle Text im Suchfeld. Nur dann enthalten, wenn das Gitter mit IncludeSearchInPersistedState="true" UND die Box einen nicht leeren Wert hat. standardmäßig ausgeschaltet, da Suchbegriffe empfindlich sein können (z. B. Kundennamen im CRM-Kontext).

URL-Codierung

Der Zustand wird als kompaktes JSON (ohne Leerraum) serialisiert und URL-kodiert in den Abfrageparameter. Ein Raster, das Seite 3 einer Kontaktansicht zeigt, sortiert nach Nachnamen, aufsteigend und dann auf absteigend, mit aktivierter Suche "Smith", würde die folgende Nutzlast hin und her umrunden:

Nach der URL-Codierung sieht der eigentliche Wert der Adressleiste so aus (das Framework ruft encodeURIComponent den JSON-String vor dem Schreiben auf):

Default-Value Stripping

Der Encoder entfernt jedes Feld, das seinem natürlichen Standard entspricht, bevor er serialisiert. Seite 1 fällt aus, peine leere Sortierliste fällt saus, eine unmarkierte aufsteigende Sortierung fällt d, und eine leere Suche fällt qaus. Ein frisch geladenes Raster ohne Benutzerinteraktion kodiert zu einem Blob, der nur v und enthält – ps und verhindert, dass Lesezeichen-URLs für den Zustand wachsen, den der Verbraucher nicht berührt hat.

Browser-Verlaufsverhalten

Statusänderungen aktualisieren die URL mit history.replaceState – sie verschieben keine neuen Einträge auf den Backstack. Das bedeutet, dass das Zurückdrücken von einer Gitterseite zur vorherigen eindeutigen Seite (dem Navigationsursprung des Benutzers) zurückkehrt, nicht zur vorherigen Sortier-/Seitenkombination. Der Kompromiss ist beabsichtigt: Eine einzelne Grid-Sitzung kann Dutzende von Zustandsänderungen verursachen, und wenn man jede einzelne als Navigationseintragung drückt, würde der Zurück-Button im Rest der App praktisch nutzlos machen.

Aktivierung der Suchpersistenz

Standardmäßig wird Suchtext von der URL ausgeschlossen, sodass der Parameter auch dann sicher geteilt werden kann, wenn das Raster nach einem sensiblen Begriff filtert. Stellen Sie ein, IncludeSearchInPersistedState="true" dass der aktuelle Wert des Suchfelds in der codierten Nutzlast enthalten ist (hinzugefügt als obiges Feld q ). Sobald aktiviert, wird die Suche Teil des Lesezeichenzustands – der Benutzer kann die URL kopieren und der Empfänger landet auf derselben Kombination aus Ansicht, Seite, Sortierung UND Filter.

React
Blazor

Cross-Stack-Kompatibilität

Die kodierte JSON-Form ist identisch zwischen den Blazor- und React-Grid-Implementierungen – gleicher Parametername, gleiche Schlüssel (v / p / ps / s / ), qgleiche Wertsemantik. Ein Link, der von einem Stack erzeugt wird, ist vom anderen konsumierbar, sodass eine Organisation, die beide Oberflächen betreibt (z. B. ein öffentlich zugängliches React-Portal zusammen mit einer internen Blazor-Admin-App), Grid-URLs ohne eine Übersetzungsschicht pro Stack gemeinsam teilen kann.

Mehrere Raster auf einer Seite

Zwei Gitter auf derselben Seite müssen unterschiedliche PersistedStateQueryParameter Namen tragen. Jedes Gitter liest und schreibt nur seinen eigenen Parameter, sodass die Wiederverwendung desselben Namens dazu führen würde, dass beide Gitter um denselben URL-Slot kämpfen – letzter Schreib gewinnt, und das andere Gitter verliert bei jeder Änderung seinen Zustand. Eine typische Konvention ist es, den Parameter nach der Rolle des Gitters zu benennen (z. B. contactsState + accountsState).

Mehrtabellengitter

A MainGrid kann Ansichten aus verschiedenen Tabellen anzeigen, indem sie Ansichts-IDs aus mehreren Tabellen in der ViewIds Sammlung einfügt. Wenn der Benutzer die Ansicht wechselt, lädt das Raster automatisch die Daten der richtigen Tabelle. Verwenden Sie die OnClick Callback-Buttons, um die URL dynamisch basierend auf dem Tabellennamen der ausgewählten Ansicht einzustellen.

React
Blazor
Reagieren Blazor

MainGrid Baureihe

Parameter

Name
Typ
Default
Beschreibung
AllowChangingPageSizebool
True
Wenn zutreffend, kann der Benutzer die Anzahl der angezeigten Elemente pro Seite ändern.
AllowDownloadForFileColumnsbool
True
Wenn true (der Standard), rendert das Raster ein Download-Icon pro Zeile an der Hinterkante von Datei- und Bildspaltenzellen. Wenn man darauf klickt, wird die Datei auf die Browser des Nutzers. Auf falsch eingestellt, um das Symbol zu unterdrücken – zum Beispiel bei Schreibschutz Audit-Grids, in denen Dateiexport nicht erlaubt ist.
AllowEditbool
False
Sollte die Option für den Benutzer verfügbar sein, die Inline-Bearbeitung für das Raster zu aktivieren.
AllowNavigateOnPrimaryNameClickbool
True
Wenn true (der Standard) und das Raster einen registrierten 'Bearbeiten'-Button hat (a GridButton mit IsOpenRecordButton=true), der Zelle, die rendert Die Spalte Primärname der Tabelle wird zu einem Hyperlink. Wenn man darauf klickt, wird dasselbe gesendet per-Zeilen-Aufruf, wie ein Doppelklick auf eine Zeile machen würde – sodass ein Benutzer zur Bearbeitung springen kann formular (oder die navigierte Bearbeitungs-URL, je nach registriertem Button) ohne First Wähle die Reihe aus. Setzen Sie auf falsch , um den Hyperlink zu unterdrücken und das Symbol darzustellen Primärname-Zelle als Klartext. Hat keinen Effekt, wenn kein Bearbeiten-Button registriert ist.
AllowNavigateOnRowDoubleClickbool
True
Wenn true (der Standard) und das Raster einen registrierten 'Bearbeiten'-Button hat (a GridButton mit IsOpenRecordButton=true), indem man eine Zeile doppelt anklickt ruft das OnClick dieser Schaltfläche für den Datensatz der Zeile auf – öffnen den Bearbeitungsdialog oder die Navigation zur URL bearbeiten, je nachdem, was der Button macht. Stellen Sie auf falsch , um den Doppelklick-Handler zu unterdrücken. Hat keine Wirkung, wenn kein Bearbeiten-Button fehlt ist registriert.
AllowPreviewForFileColumnsbool
True
Wenn true (der Standard), rendert das Raster ein per-Zeilen-'Augen'-Vorschau-Icon an der Hinterkante von Datei- und Bildspaltenzellen, deren Inhalt inline gerendert werden kann (Bilder, PDFs, Klartext). Auf falsch setzen, um das Symbol zu unterdrücken – zum Beispiel auf Raster, in denen die Spalten nicht auch als Vorschau-Einstiegspunkt dienen sollten.
AllowSearchbool
True
Sollte der Nutzer das Raster durchsuchen dürfen.
BorderVisiblebool
True
Kontrolliert, ob ein sichtbarer Rand um das Raster herum gerendert wird.
ButtonsRenderFragment?
Optionales Renderfragment, das zur Definition der Tastenleiste über dem Raster verwendet wird.
ColumnsRenderFragment?
Optionales Fragment mit verbraucherdeklariertem Fragment Components.GridColumnsComponents.GridColumn Kinder. Wenn es versorgt ist, schaltet das Netz auf Ersetzmodus: Nur die deklarierten Spalten werden gerendert (in deklariert Reihenfolge), wird die FetchXML-Projektion umgeschrieben, um zu entsprechen, und die Die Spaltenliste von Underlying View wird ignoriert. null belässt das Raster in seinem Standardverhalten (Spalten automatisch generieren aus die aufgelöste Spaltenmenge der Ansicht).
CustomViewDefinitionsList<GridViewDefinition>?
Benutzerdefinierte Ansichten, die im Dropdown-Menü angezeigt werden.
DataSourceViewDataSource?
Optional, geteilt Data.ViewDataSource. Wenn gesetzt, ist das Gitter liest seine Zeilen + Gesamtanzahl aus der Datenquelle statt Eigene Ausgabe RetrieveRecordsAsync(System.String) Call — dieselbe Datenquelle kann ein Geschwister steuern <DataverseChart> oder ein zweites Gitter, sodass sie alle Paginierung / Filter / Suche zusammen auf einer Hin- und Rückfahrt. Eigenständige Nutzung (ohne GridBase.DataSource) hält das bestehende interne Zustandsmaschine – das Gitter erstellt FetchXML und holt direkt über IPowerPortalsProService . Was die Datenquelle NICHT besitzt: eine Benutzeroberfläche pro Gitter Zustand (ausgewählte Zeilen, ausstehende Zeilen, erstellt / aktualisiert / löscht), Spaltenbreiten). Diese bleiben grid-lokal – zwei Grids, die sich eines teilen Die Datenquelle kann weiterhin eine unabhängige Auswahl und ein per-Gitter-System haben Bearbeitungen stehen aus. Wenn ViewDataSource.Highlight gesetzt wird (z. B. über eine Diagramm-Schnittklick im Kreuzfilter-'Highlight'-Modus), Zeilen, deren Zeilen Der Wert in der hervorgehobenen Spalte passt nicht visuell zu gedämpft über eine CSS-Klasse; Die Zeilendaten + Auswahl sind Unbeeinflusst (der Soft Cross-Filter ist rein Styling).
DefaultItemsPerPageint
50
Standardanzahl der Datensätze, die auf einer Seite geladen werden sollen.
DefaultViewIdGuid?
Der Ansicht, dass das Raster beim ersten Laden angezeigt werden sollte.
Editablebool
False
Ist das Inline-Editing für das Raster aktiviert?
FiltersIReadOnlyList<GridFilterBase>?
Zusätzliche serverseitige Filter AND-merged auf die aufgelösten Ansichten FetchXML vor Auspagieren, Sortieren und Suchen setzt ein. Weitergeleitet an Query.IFetchXmlQueryComposer's FetchXmlQueryOptions.Filters, Jeder Eintrag wird also nach Laufzeittyp gesendet (z. B. Models.RelationshipFilter AND-verschmilzt eine Beziehungsverbindungs-Entität). Typische Nutzung: Der LinkExistingRecordGridButton-Picker übergibt einen Models.RelationshipFilter mit RelationshipFilterMode.ExcludeExistingRecords Also schon- verknüpfte Datensätze sind im M2M-Suche-Dialog verborgen. Kombiniert additiv mit SubGrids eigenem internen System Beziehungsfilter (der direkt im FetchXML integriert ist) anstatt durch den Komponisten-Filter-Slot zu gehen) – beide enden Auf derselben Anfrage.
FullSizebool
False
Wenn zutreffend, dehnt sich das Gitter aus, um den gesamten verfügbaren vertikalen Raum auszufüllen, anstatt eine feste Mindesthöhe zu verwenden.
HidePagingbool
False
Erzwingen Sie, dass die Seitengröße und die Auslagerungskomponenten ausgeborgen werden. Tun Sie dies nur, wenn die Anzahl der Elemente bekannt ist und die Seitengröße auf etwas höher als die Anzahl der Artikel gesetzt ist.
IncludeSearchInPersistedStatebool
False
Wenn zutreffend, wird der aktive Suchtext in die persistente Version einbezogen state-URL-Parameter (unter dem q-Feld ). Standardwert auf falsch — Suchbegriffe sensibel sein können, sich im Browserverlauf ansammeln, und in HTTP-Referrer durchsickern, sodass das Raster sie aus der URL heraushält, es sei denn, Der Verbraucher meldet sich ausdrücklich ein. Hat keine Wirkung, wenn GridBase.PersistedStateQueryParameter nicht festgelegt ist.
IsDirtybool
False
Gibt an, ob das Grid noch nicht gespeicherte Erstellungs-, Aktualisierungs- oder Löschvorgänge hat.
LoadedRecordsIEnumerable<TableRecord>
Datensätze, die derzeit im Raster (der aktuellsten Seite mit Ergebnissen) gerendert werden. Gedacht für Toolbar-Befehle, die auf 'alles Gezeigte' reagieren müssen – z. B. eine Bulk Download-Button. Erstreckt sich nicht über Seiten; Bulk-Querseiten-Operationen sollten ihre Stattdessen eigene unpaged-Apport.
MaxHeightstring?
Maximale Höhe, auf die sich die Gittersteuerung ausdehnen sollte.
MinHeightstring?
300px
Minimale Höhe, die die Grid-Steuerung einnehmen sollte.
ModeGridMode
RecordSelection
Legt den Verhaltensmodus des Rasters fest, wie z. B. Standardinteraktion oder Datensatzauswahlmodus.
PageSizesIEnumerable<int>
Sammlung verfügbarer Seitengrößen für das Raster.
PagingModeGridPagingMode
Paged
Bestimmt, ob das Raster traditionelle Paging- oder Unendlichkeits-Scroll-Virtualisierung verwendet.
PersistedRowsSnapshotPersistedGridRowsSnapshot?
Server-Prerender → interaktives Handoff für die gerenderte Seite mit Zeilen. Das Rahmenwerk Erhält diese Eigenschaft am Ende von Prerender automatisch erhalten und rehydriert sie davor GridBase.OnInitializedAsync auf der interaktiven Seite, also kann der Datenabruf Ich habe das erste interaktive Rendering übersprungen. Wird durch die Position des Renderbaums durch das Framework geschlüsselt; Das Feld PersistedGridRowsSnapshot.ViewId wird beim Verbrauch überprüft Zeit, also wirft ein Rerender gegen eine andere Ansicht die veralteten Reihen weg. Öffentlichkeit gemäß der Anforderung des Rahmens – [PersistentState] sieht öffentliche Objekte nur über Reflexion – aber nicht dazu gedacht, extern gesetzt zu werden.
PersistedStateQueryParameterstring?
Name des URL-Abfragestring-Parameters, um das interaktive Raster zu erhalten Staat an. Wenn gesetzt, liest das Gitter diesen Parameter bei der Anfangslast und Seeds die aktive Ansicht, Seitenzahl, Seitengröße und sortieren daraus; nachfolgende Benutzeraktionen (Ansichtsauswahl, Seitenänderung, Kopfzeilensortierung usw.) Schreibe den neuen Zustand zurück über Components.NavigationManager's Ersetz-Zustand-Pfad. Persistenz übersteht Seitenaktualisierung und Lesezeichen.
SelectedRecordsIEnumerable<TableRecord>
Datensätze, die derzeit im Raster ausgewählt sind.
SelectFromEntireRowbool
True
Wenn das stimmt, wählt ein Klick auf eine beliebige Zeile sie aus; wenn falsch, wählt nur das Kontrollkästchen die Zeile aus.
SelectModeDataGridSelectMode
Multiple
Kontrolliert, ob das Raster eine einzelne oder mehrere Zeilen auswählt.
TableNamestring?
Der logische Name der Tabelle, deren öffentliche Aufrufe geladen werden sollten. Nur anwendbar, wenn keine Werte für GridBase.DefaultViewId oder GridBase.ViewIdsangegeben sind.
Titlestring?
Name, der angezeigt wird, wenn das Dropdown-Menü nicht angezeigt wird.
TransformViewAsyncFunc<GridViewDefinition, Task<GridViewDefinition>>?
Optionaler Callback, der unmittelbar nach dem Laden einer Ansicht und vor der Nutzung des Grids ausgeführt wird Es soll Spalten oder Abfragen erstellen. Geben Sie ein modifiziertes Models.GridViewDefinition Formular zurück zu transformieren Sie, was das Raster letztlich rendert – zum Beispiel, um eine bestimmte Spalte sicherzustellen ist unabhängig von der eigenen Konfiguration der Ansicht immer vorhanden. Asynchron, damit Anrufer es können Konsultieren Sie Metadaten-Caches, Dienste oder andere asynchrone Ressourcen bei der Entscheidung, was zu tun ist Include.
ViewIdsIEnumerable<Guid>?
Liste der IDs der Ansichten, auf die das Raster im Dropdown-Menü beschränkt werden sollte.
ViewSortViewSort
NameAscending
Sortiere die Reihenfolge der Ansichten im Ansichts-Dropdown.
Name: AllowChangingPageSize
Typ: bool
Default: True
Beschreibung: Wenn zutreffend, kann der Benutzer die Anzahl der angezeigten Elemente pro Seite ändern.
Name: AllowDownloadForFileColumns
Typ: bool
Default: True
Beschreibung: Wenn true (der Standard), rendert das Raster ein Download-Icon pro Zeile an der Hinterkante von Datei- und Bildspaltenzellen. Wenn man darauf klickt, wird die Datei auf die Browser des Nutzers. Auf falsch eingestellt, um das Symbol zu unterdrücken – zum Beispiel bei Schreibschutz Audit-Grids, in denen Dateiexport nicht erlaubt ist.
Name: AllowEdit
Typ: bool
Default: False
Beschreibung: Sollte die Option für den Benutzer verfügbar sein, die Inline-Bearbeitung für das Raster zu aktivieren.
Name: AllowNavigateOnPrimaryNameClick
Typ: bool
Default: True
Beschreibung: Wenn true (der Standard) und das Raster einen registrierten 'Bearbeiten'-Button hat (a GridButton mit IsOpenRecordButton=true), der Zelle, die rendert Die Spalte Primärname der Tabelle wird zu einem Hyperlink. Wenn man darauf klickt, wird dasselbe gesendet per-Zeilen-Aufruf, wie ein Doppelklick auf eine Zeile machen würde – sodass ein Benutzer zur Bearbeitung springen kann formular (oder die navigierte Bearbeitungs-URL, je nach registriertem Button) ohne First Wähle die Reihe aus. Setzen Sie auf falsch , um den Hyperlink zu unterdrücken und das Symbol darzustellen Primärname-Zelle als Klartext. Hat keinen Effekt, wenn kein Bearbeiten-Button registriert ist.
Name: AllowNavigateOnRowDoubleClick
Typ: bool
Default: True
Beschreibung: Wenn true (der Standard) und das Raster einen registrierten 'Bearbeiten'-Button hat (a GridButton mit IsOpenRecordButton=true), indem man eine Zeile doppelt anklickt ruft das OnClick dieser Schaltfläche für den Datensatz der Zeile auf – öffnen den Bearbeitungsdialog oder die Navigation zur URL bearbeiten, je nachdem, was der Button macht. Stellen Sie auf falsch , um den Doppelklick-Handler zu unterdrücken. Hat keine Wirkung, wenn kein Bearbeiten-Button fehlt ist registriert.
Name: AllowPreviewForFileColumns
Typ: bool
Default: True
Beschreibung: Wenn true (der Standard), rendert das Raster ein per-Zeilen-'Augen'-Vorschau-Icon an der Hinterkante von Datei- und Bildspaltenzellen, deren Inhalt inline gerendert werden kann (Bilder, PDFs, Klartext). Auf falsch setzen, um das Symbol zu unterdrücken – zum Beispiel auf Raster, in denen die Spalten nicht auch als Vorschau-Einstiegspunkt dienen sollten.
Name: AllowSearch
Typ: bool
Default: True
Beschreibung: Sollte der Nutzer das Raster durchsuchen dürfen.
Name: BorderVisible
Typ: bool
Default: True
Beschreibung: Kontrolliert, ob ein sichtbarer Rand um das Raster herum gerendert wird.
Name: Buttons
Typ: RenderFragment?
Beschreibung: Optionales Renderfragment, das zur Definition der Tastenleiste über dem Raster verwendet wird.
Name: Columns
Typ: RenderFragment?
Beschreibung: Optionales Fragment mit verbraucherdeklariertem Fragment Components.GridColumnsComponents.GridColumn Kinder. Wenn es versorgt ist, schaltet das Netz auf Ersetzmodus: Nur die deklarierten Spalten werden gerendert (in deklariert Reihenfolge), wird die FetchXML-Projektion umgeschrieben, um zu entsprechen, und die Die Spaltenliste von Underlying View wird ignoriert. null belässt das Raster in seinem Standardverhalten (Spalten automatisch generieren aus die aufgelöste Spaltenmenge der Ansicht).
Name: CustomViewDefinitions
Typ: List<GridViewDefinition>?
Beschreibung: Benutzerdefinierte Ansichten, die im Dropdown-Menü angezeigt werden.
Name: DataSource
Typ: ViewDataSource?
Beschreibung: Optional, geteilt Data.ViewDataSource. Wenn gesetzt, ist das Gitter liest seine Zeilen + Gesamtanzahl aus der Datenquelle statt Eigene Ausgabe RetrieveRecordsAsync(System.String) Call — dieselbe Datenquelle kann ein Geschwister steuern <DataverseChart> oder ein zweites Gitter, sodass sie alle Paginierung / Filter / Suche zusammen auf einer Hin- und Rückfahrt. Eigenständige Nutzung (ohne GridBase.DataSource) hält das bestehende interne Zustandsmaschine – das Gitter erstellt FetchXML und holt direkt über IPowerPortalsProService . Was die Datenquelle NICHT besitzt: eine Benutzeroberfläche pro Gitter Zustand (ausgewählte Zeilen, ausstehende Zeilen, erstellt / aktualisiert / löscht), Spaltenbreiten). Diese bleiben grid-lokal – zwei Grids, die sich eines teilen Die Datenquelle kann weiterhin eine unabhängige Auswahl und ein per-Gitter-System haben Bearbeitungen stehen aus. Wenn ViewDataSource.Highlight gesetzt wird (z. B. über eine Diagramm-Schnittklick im Kreuzfilter-'Highlight'-Modus), Zeilen, deren Zeilen Der Wert in der hervorgehobenen Spalte passt nicht visuell zu gedämpft über eine CSS-Klasse; Die Zeilendaten + Auswahl sind Unbeeinflusst (der Soft Cross-Filter ist rein Styling).
Name: DefaultItemsPerPage
Typ: int
Default: 50
Beschreibung: Standardanzahl der Datensätze, die auf einer Seite geladen werden sollen.
Name: DefaultViewId
Typ: Guid?
Beschreibung: Der Ansicht, dass das Raster beim ersten Laden angezeigt werden sollte.
Name: Editable
Typ: bool
Default: False
Beschreibung: Ist das Inline-Editing für das Raster aktiviert?
Name: Filters
Typ: IReadOnlyList<GridFilterBase>?
Beschreibung: Zusätzliche serverseitige Filter AND-merged auf die aufgelösten Ansichten FetchXML vor Auspagieren, Sortieren und Suchen setzt ein. Weitergeleitet an Query.IFetchXmlQueryComposer's FetchXmlQueryOptions.Filters, Jeder Eintrag wird also nach Laufzeittyp gesendet (z. B. Models.RelationshipFilter AND-verschmilzt eine Beziehungsverbindungs-Entität). Typische Nutzung: Der LinkExistingRecordGridButton-Picker übergibt einen Models.RelationshipFilter mit RelationshipFilterMode.ExcludeExistingRecords Also schon- verknüpfte Datensätze sind im M2M-Suche-Dialog verborgen. Kombiniert additiv mit SubGrids eigenem internen System Beziehungsfilter (der direkt im FetchXML integriert ist) anstatt durch den Komponisten-Filter-Slot zu gehen) – beide enden Auf derselben Anfrage.
Name: FullSize
Typ: bool
Default: False
Beschreibung: Wenn zutreffend, dehnt sich das Gitter aus, um den gesamten verfügbaren vertikalen Raum auszufüllen, anstatt eine feste Mindesthöhe zu verwenden.
Name: HidePaging
Typ: bool
Default: False
Beschreibung: Erzwingen Sie, dass die Seitengröße und die Auslagerungskomponenten ausgeborgen werden. Tun Sie dies nur, wenn die Anzahl der Elemente bekannt ist und die Seitengröße auf etwas höher als die Anzahl der Artikel gesetzt ist.
Name: IncludeSearchInPersistedState
Typ: bool
Default: False
Beschreibung: Wenn zutreffend, wird der aktive Suchtext in die persistente Version einbezogen state-URL-Parameter (unter dem q-Feld ). Standardwert auf falsch — Suchbegriffe sensibel sein können, sich im Browserverlauf ansammeln, und in HTTP-Referrer durchsickern, sodass das Raster sie aus der URL heraushält, es sei denn, Der Verbraucher meldet sich ausdrücklich ein. Hat keine Wirkung, wenn GridBase.PersistedStateQueryParameter nicht festgelegt ist.
Name: IsDirty
Typ: bool
Default: False
Beschreibung: Gibt an, ob das Grid noch nicht gespeicherte Erstellungs-, Aktualisierungs- oder Löschvorgänge hat.
Name: LoadedRecords
Typ: IEnumerable<TableRecord>
Beschreibung: Datensätze, die derzeit im Raster (der aktuellsten Seite mit Ergebnissen) gerendert werden. Gedacht für Toolbar-Befehle, die auf 'alles Gezeigte' reagieren müssen – z. B. eine Bulk Download-Button. Erstreckt sich nicht über Seiten; Bulk-Querseiten-Operationen sollten ihre Stattdessen eigene unpaged-Apport.
Name: MaxHeight
Typ: string?
Beschreibung: Maximale Höhe, auf die sich die Gittersteuerung ausdehnen sollte.
Name: MinHeight
Typ: string?
Default: 300px
Beschreibung: Minimale Höhe, die die Grid-Steuerung einnehmen sollte.
Name: Mode
Typ: GridMode
Default: RecordSelection
Beschreibung: Legt den Verhaltensmodus des Rasters fest, wie z. B. Standardinteraktion oder Datensatzauswahlmodus.
Name: PageSizes
Typ: IEnumerable<int>
Beschreibung: Sammlung verfügbarer Seitengrößen für das Raster.
Name: PagingMode
Typ: GridPagingMode
Default: Paged
Beschreibung: Bestimmt, ob das Raster traditionelle Paging- oder Unendlichkeits-Scroll-Virtualisierung verwendet.
Name: PersistedRowsSnapshot
Typ: PersistedGridRowsSnapshot?
Beschreibung: Server-Prerender → interaktives Handoff für die gerenderte Seite mit Zeilen. Das Rahmenwerk Erhält diese Eigenschaft am Ende von Prerender automatisch erhalten und rehydriert sie davor GridBase.OnInitializedAsync auf der interaktiven Seite, also kann der Datenabruf Ich habe das erste interaktive Rendering übersprungen. Wird durch die Position des Renderbaums durch das Framework geschlüsselt; Das Feld PersistedGridRowsSnapshot.ViewId wird beim Verbrauch überprüft Zeit, also wirft ein Rerender gegen eine andere Ansicht die veralteten Reihen weg. Öffentlichkeit gemäß der Anforderung des Rahmens – [PersistentState] sieht öffentliche Objekte nur über Reflexion – aber nicht dazu gedacht, extern gesetzt zu werden.
Name: PersistedStateQueryParameter
Typ: string?
Beschreibung: Name des URL-Abfragestring-Parameters, um das interaktive Raster zu erhalten Staat an. Wenn gesetzt, liest das Gitter diesen Parameter bei der Anfangslast und Seeds die aktive Ansicht, Seitenzahl, Seitengröße und sortieren daraus; nachfolgende Benutzeraktionen (Ansichtsauswahl, Seitenänderung, Kopfzeilensortierung usw.) Schreibe den neuen Zustand zurück über Components.NavigationManager's Ersetz-Zustand-Pfad. Persistenz übersteht Seitenaktualisierung und Lesezeichen.
Name: SelectedRecords
Typ: IEnumerable<TableRecord>
Beschreibung: Datensätze, die derzeit im Raster ausgewählt sind.
Name: SelectFromEntireRow
Typ: bool
Default: True
Beschreibung: Wenn das stimmt, wählt ein Klick auf eine beliebige Zeile sie aus; wenn falsch, wählt nur das Kontrollkästchen die Zeile aus.
Name: SelectMode
Typ: DataGridSelectMode
Default: Multiple
Beschreibung: Kontrolliert, ob das Raster eine einzelne oder mehrere Zeilen auswählt.
Name: TableName
Typ: string?
Beschreibung: Der logische Name der Tabelle, deren öffentliche Aufrufe geladen werden sollten. Nur anwendbar, wenn keine Werte für GridBase.DefaultViewId oder GridBase.ViewIdsangegeben sind.
Name: Title
Typ: string?
Beschreibung: Name, der angezeigt wird, wenn das Dropdown-Menü nicht angezeigt wird.
Name: TransformViewAsync
Typ: Func<GridViewDefinition, Task<GridViewDefinition>>?
Beschreibung: Optionaler Callback, der unmittelbar nach dem Laden einer Ansicht und vor der Nutzung des Grids ausgeführt wird Es soll Spalten oder Abfragen erstellen. Geben Sie ein modifiziertes Models.GridViewDefinition Formular zurück zu transformieren Sie, was das Raster letztlich rendert – zum Beispiel, um eine bestimmte Spalte sicherzustellen ist unabhängig von der eigenen Konfiguration der Ansicht immer vorhanden. Asynchron, damit Anrufer es können Konsultieren Sie Metadaten-Caches, Dienste oder andere asynchrone Ressourcen bei der Entscheidung, was zu tun ist Include.
Name: ViewIds
Typ: IEnumerable<Guid>?
Beschreibung: Liste der IDs der Ansichten, auf die das Raster im Dropdown-Menü beschränkt werden sollte.
Name: ViewSort
Typ: ViewSort
Default: NameAscending
Beschreibung: Sortiere die Reihenfolge der Ansichten im Ansichts-Dropdown.

Veranstaltungen

Name
Typ
Beschreibung
EditableChangedEventCallback<bool>
Callback wird aufgerufen, wenn sich der Inline-Bearbeitungszustand ändert.
SelectedRecordsChangedEventCallback<IEnumerable<TableRecord>>
Callback wird aufgerufen, wenn sich die Auswahl der Datensätze ändert.
Name: EditableChanged
Typ: EventCallback<bool>
Beschreibung: Callback wird aufgerufen, wenn sich der Inline-Bearbeitungszustand ändert.
Name: SelectedRecordsChanged
Typ: EventCallback<IEnumerable<TableRecord>>
Beschreibung: Callback wird aufgerufen, wenn sich die Auswahl der Datensätze ändert.

Methoden

Name
Parameter
Typ
Beschreibung
ClearSelectionAsyncTask
Löscht alle aktuell ausgewählten Zeilen.
OpenFileDownloadAsyncTableRecord record
string columnName
Task
Ruft die Bytes der Datei-/Bildspalte ab record und streamt sie als Download in den Browser des Nutzers. Aufruft durch das Download-Symbol pro Zeile in der Datei und Bildzellen.
OpenFilePreviewAsyncTableRecord record
string columnName
Task
Öffnet den Inline-Vorschaudialog für die Datei-/Bildspalte columnName auf record. Wird durch das pro-zeilige Vorschausymbol in Datei-/Bildzellen aufgerufen und auch für Kompositionskomponenten verfügbar (zum Beispiel eine Symbolleiste-Schaltfläche auf einem Wrapping Gitter), die einen programmatischen Einstiegspunkt wollen.
RefreshAsyncbool forceRefresh
Task
Weist das Gitter an, die aktuellen Daten aus der bereitgestellten Datenquelle erneut abzurufen und darzustellen.
Validatebool
Validiert alle editierbaren Zeilen im Raster.
Name: ClearSelectionAsync
Typ: Task
Beschreibung: Löscht alle aktuell ausgewählten Zeilen.
Name: OpenFileDownloadAsync
Parameter: TableRecord record
string columnName
Typ: Task
Beschreibung: Ruft die Bytes der Datei-/Bildspalte ab record und streamt sie als Download in den Browser des Nutzers. Aufruft durch das Download-Symbol pro Zeile in der Datei und Bildzellen.
Name: OpenFilePreviewAsync
Parameter: TableRecord record
string columnName
Typ: Task
Beschreibung: Öffnet den Inline-Vorschaudialog für die Datei-/Bildspalte columnName auf record. Wird durch das pro-zeilige Vorschausymbol in Datei-/Bildzellen aufgerufen und auch für Kompositionskomponenten verfügbar (zum Beispiel eine Symbolleiste-Schaltfläche auf einem Wrapping Gitter), die einen programmatischen Einstiegspunkt wollen.
Name: RefreshAsync
Parameter: bool forceRefresh
Typ: Task
Beschreibung: Weist das Gitter an, die aktuellen Daten aus der bereitgestellten Datenquelle erneut abzurufen und darzustellen.
Name: Validate
Typ: bool
Beschreibung: Validiert alle editierbaren Zeilen im Raster.

GridViewDefinition Baureihe

Eigenschaften

Name
Typ
Default
Beschreibung
ColumnsList<ViewColumn>
Die im Raster angezeigten Spalten, einschließlich ihrer logischen Namen und Pixelbreiten.
DisplayNamestring?
Optionaler Anzeigenname für diese Ansicht. Wenn gesetzt, wird dies als Standardbezeichnung in der Ansichtselektor-Dropdown-Menü. Ein Lokalisierungseintrag bei Tische. {TableName}.views. {Id}.Label hat Vorrang, falls es existiert.
FetchXmlstring
Die FetchXML-Abfrage, die definiert, welche Datensätze und Spalten für diese Ansicht abgerufen werden.
TableNamestring
Der logische Name der Dataverse-Tabelle, die diese Ansicht abfragt.
Name: Columns
Typ: List<ViewColumn>
Beschreibung: Die im Raster angezeigten Spalten, einschließlich ihrer logischen Namen und Pixelbreiten.
Name: DisplayName
Typ: string?
Beschreibung: Optionaler Anzeigenname für diese Ansicht. Wenn gesetzt, wird dies als Standardbezeichnung in der Ansichtselektor-Dropdown-Menü. Ein Lokalisierungseintrag bei Tische. {TableName}.views. {Id}.Label hat Vorrang, falls es existiert.
Name: FetchXml
Typ: string
Beschreibung: Die FetchXML-Abfrage, die definiert, welche Datensätze und Spalten für diese Ansicht abgerufen werden.
Name: TableName
Typ: string
Beschreibung: Der logische Name der Dataverse-Tabelle, die diese Ansicht abfragt.