Raster-Buttons

Raster-Symbolleisten-Buttons steuern, wie Benutzer mit Datensätzen in einem MainGrid oder SubGridinteragieren. Buttons werden im Renderfragment Buttons platziert und erscheinen automatisch in der Werkzeugleiste des Rasters.

Button-Kategorien

Es gibt drei Kategorien von Raster-Buttons, je nachdem, wie sie Datensatzoperationen handhaben:

  • Dialog-Buttons – Öffnen Sie ein Formular in einem Dialog, um Datensätze inline zu erstellen oder zu bearbeiten, ohne die Seite zu verlassen.
  • Navigationsbuttons — Navigieren Sie zu einer separaten Seiten-URL zum Erstellen oder Bearbeiten von Datensätzen.
  • Aktionsbuttons — Führen Sie Operationen wie das Löschen, Verknüpfen oder Entkoppeln von Datensätzen direkt aus.

Die Wahl des richtigen Ansatzes

Wählen Sie die Tastenform basierend darauf, wie viel Kontext der Nutzer benötigt und wie viel neuer Zustand es braucht. Die drei untenstehenden Eimer decken die typischen Fälle ab.

  • Dialog (inline) — Verwenden NewRecordGridButton / OpenRecordGridButton wenn das Formular in einen einzelnen Dialog passt und der Nutzer davon profitiert, auf der aktuellen Seite zu bleiben (z. B. indem ein Kontakt zu einem Kontoeintrag hinzugefügt wird, ohne die anderen nicht gespeicherten Änderungen des Kontos zu verlieren). Kombinieren Sie mit Behavior="GridActionBehavior.WithGridContext" (dem Standard), um den Speicherstand des neuen Datensatzes in den transaktionalen Commit des übergeordneten Kontexts einzufügen.
  • Navigieren (ganze Seite) — Verwenden NavigateNewRecordGridButton Sie / NavigateOpenRecordGridButton wenn das Erstellen oder Bearbeiten eine reichhaltigere Oberfläche benötigt, als ein Dialog bequem bieten kann: viele Felder, mehrere Tabs, eigene verwandte Datensätze, Anhänge oder teilbare URLs. Die Route besitzt ihr eigenes RecordContext, sodass das übergeordnete Raster sich der Komplexität der Form nicht bewusst sein muss.
  • Wizard (mehrstufiger Dialog) — Verwenden NewRecordGridButton FormType="FormType.WizardForm" , wenn das Formular genug Felder hat, sodass ein Bildschirm überfüllt wirkt, die Eingaben aber so voneinander abhängig sind, dass sich die Navigation auf Seiten aufteilen lohnt. Gemeinsame Form: Seite 1 erfasst Identität / Klassifikation, Seite 2 erfasst Details, die von den Entscheidungen auf Seite 1 abhängen.

Speicher-Flow- und Verhaltensmodi

Jeder dialogbasierte Rasterknopf (NewRecordGridButton, OpenRecordGridButton, das M2M-Link-/Entlink-Paar) akzeptiert einen Parameter Behavior , der steuert, wann der zugrunde liegende Dataverse-Aufruf ausgelöst wird. Die beiden Werte bilden wesentlich unterschiedliche Anforderungssequenzen zu:

Verhalten = Sofort

Der Save-Button des Dialogs gibt die Anfrage zum Erstellen / Aktualisieren / Zuordnen / Trennen direkt an Dataverse ExecuteMultipleAsyncaus, aktualisiert das Raster und schließt dann den Dialog. Die Umgebung MainContext / RecordContext (falls vorhanden) sieht die Veränderung nicht – sie ist bereits festgelegt.

  1. Der Benutzer klickt im Dialog auf Speichern.
  2. Dialog validiert und schickt dann ein oder mehrere OrganizationRequests durch ExecuteMultipleAsync.
  3. Server liefert zurück; das Raster aktualisiert sich; Der Dialog endet.

Wählen Sie diese Option, wenn: der Dialog allein steht (kein Speichern-Button auf der umliegenden Seite vorhanden), oder der Nutzer wirklich möchte, dass jede Aktion auf Zeilenebene ein eigenständiger Commit ist. Jeder Speicherstand hier ist unabhängig – die teilweise Fertigstellung eines mehrzeiligen Workflows bleibt auf dem Server.

Verhalten = MitGridContext (Standard)

Die Save-Taste des Dialogs führt die Anfrage in der ausstehenden Warteschlange des Grids (_rowsToCreate / _rowsToUpdate in Blazor, dem React-Äquivalent in useGridContext()) und schließt den Dialog. Der eigentliche Dataverse-Aufruf löst sich erst aus, wenn der Save-Button in der Umgebung MainContext geklickt RecordContextwird.

  1. Der Benutzer klickt im Dialog auf Speichern, → der Datensatz (oder aktualisieren / assoziieren / dissoziieren) im Raster in der Warteschlange ist.
  2. Dialog endet. Der übergeordnete Kontext der Seite wechselt zu IsDirty=true; der Speichern-Button auf Seitenebene aktiviert.
  3. Der Benutzer klickt auf die Seitenebene Save → jede Warteschlange-Grid-Änderung + das eigene Update des Elterndatensatzes + die ausstehenden Anfragen aller anderen Nachkommen werden zu einer einzigen ExecuteMultipleAsyncEinheit zusammengefasst.
  4. Server liefert zurück; die Seite aktualisiert sich; Warteschlangen werden frei; IsDirty flippt zurück.

Wähle das aus, wenn: Die Seite einen Elternteil RecordContext mit eigenem Speichern-Button hat – der Nutzer erwartet die Semantik "die ganze Seite speichern", und ein teilweiser Commit (Elternteil gespeichert, Kindzeilen nicht) wäre ein schlechteres Ergebnis als alles zusammenzusetzen. Das ist aus diesem Grund der Standard.

Standard ist WithGridContext

WithGridContext ist der Standard für jeden dialogbasierten Button – Sofort ist opt-in. Wenn dein Raster außerhalb eines übergeordneten Kontexts (einer eigenständigen Listen-Seite ohne Eintrag darüber) liegt, hat die Warteschlange keinen Ort, zu dem sie abfließen kann, und der Dialog fällt automatisch auf die Sofort-Semantik zurück.

NewRecordGridButton

Öffnet ein Dialogformular, um einen neuen Datensatz zu erstellen. Benötigt einen TForm Typparameter, der die Razor-Komponente angibt, um als Form darzustellen.

Nutze Location sie, um zu steuern, wo der Dialog erscheint: DialogLocation.Center (Standard) oder DialogLocation.Right (Seitenpanel).

Verwenden FormType Sie, um zwischen einer Standardform (FormType.Form) oder einem Mehrschritte-Zauberer (FormType.WizardForm) zu wählen.

Verwenden Behavior Sie, um zu steuern, wann der Datensatz erstellt wird: GridActionBehavior.Immediately Speichert sofort in Dataverse, während GridActionBehavior.WithGridContext (standardmäßig) den Speicherstand verschiebt, bis der übergeordnete Kontext committet ist.

React
Blazor

Beispiel für Standardform

Der TForm Typparameter spezifiziert eine Razor-Komponente, die das Formularlayout definiert. Eine Standardform ist einfach eine Razor-Komponente, die Editor-Komponenten enthält. Es kann Tabs, Abschnitte oder jedes benötigte Layout enthalten.

React
Blazor

Beispiel für die Zaubererform

Eine Zaubererform teilt den Erstellungsprozess in mehrere Schritte auf. Definieren Sie jeden Schritt anhand der WizardRecordPage Komponenten. Benutze FormType="FormType.WizardForm" den Knopf, um den Wizard-Modus zu aktivieren.

React
Blazor

Anmerkung

Wenn du eine Zaubererform verwendest, setze FormType="FormType.WizardForm" auf die NewRecordGridButton. Der Assistent zeigt die Zurück/Weiter-Navigation an und validiert jede Seite, bevor er fortfährt.

Validierung pro Seite

Jede WizardRecordPage Version ist standardmäßig auf ForceSuccessfulValidationBeforeSave="true": Der Next-Button des Wizards führt die Validatoren der aktiven Seite aus, bevor sie weitergehen, und hebt den Übergang ab, wenn ein benötigtes Feld leer oder ungültig ist. Auf Seiten eingestellt false , die nur optionale Felder enthalten, damit der Nutzer sie überspringen kann. Der Finish-Button auf der letzten Seite validiert immer, unabhängig von dieser Markierung – die serverseitige Ablehnung des Erstellens ist der einzige Weg, das zu überwinden.

React
Blazor

Geteilter Datensatz über Seiten hinweg

Alle WizardRecordPage Komponenten in einem NewRecordGridButton Objekt teilen dasselbe zugrundeliegende TableRecord Objekt – das Bearbeiten firstname auf Seite 1 und annualincome auf Seite 2 endet am Ende in einer einzigen Create-Payload. Die per-Seite RecordContexts binden an dieselbe Datensatzinstanz, sodass die Navigation zwischen den Schritten die laufenden Bearbeitungen bewahrt.

OpenRecordGridButton

Öffnet ein Dialogformular, um die ausgewählten Datensätze zu bearbeiten. Wie NewRecordGridButton, benötigt es einen Typparameter TForm . Wenn mehrere Datensätze ausgewählt werden, zeigt das Formular gemeinsame Felder an und wendet Änderungen auf alle ausgewählten Datensätze an.

Der Bearbeiten-Button wird automatisch ausgelöst, wenn eine Zeile im Raster doppelt geklickt wird. Auf dem Raster eingestellt AllowNavigateOnRowDoubleClick="false" , um den Doppelklick-Handler zu unterdrücken.

Standardmäßig wird die Spalte Primärname der Tabelle in jeder Zeile als Hyperlink dargestellt, und das Klicken auf den Link löst dieselbe Bearbeitungsaktion aus wie der Doppelklick. Auf dem Raster eingestellt AllowNavigateOnPrimaryNameClick="false" , um den Hyperlink zu unterdrücken und die Primärnamen-Zelle als Klartext darzustellen. Der Hyperlink erscheint nur, wenn ein OpenRecordGridButton oder NavigateOpenRecordGridButton registriert wird, sodass Raster ohne Bearbeitungsbutton unbeeinflusst bleiben.

React
Blazor

NavigierenNeuerRecordGridButton

Navigiert zu einer URL, um einen neuen Datensatz zu erstellen. Setze den Parameter Url auf die Zielseite. Wenn in einem verwendet, SubGridwird der Beziehungskontext des Elterndatensatzes automatisch als Abfragestring-Parameter angehängt.

Verwenden Sie den Callback, OnClick um die URL dynamisch basierend auf dem Grid-Kontext einzustellen. Dies ist nützlich für Multi-Table-Raster, bei denen die URL von der Tabelle der ausgewählten Ansicht abhängt.

React
Blazor

NavigierenOpenRecordGridButton

Navigiert zu einer URL, um den ausgewählten Datensatz zu bearbeiten. Der Parameter Url wird als Platzhalter für die ID des ausgewählten Datensatzes unterstützt {0} .

React
Blazor

NavigateRecordGridButton

Ein universeller Navigationsbutton mit einem benutzerdefinierten Label, Symbol und URL. Nutze dies für benutzerdefinierte Navigationsaktionen, die nicht zum Neu-/Bearbeitungsmuster passen.

React
Blazor

DeleteRecordGridButton

Löscht die ausgewählten Datensätze nach Aufforderung zur Bestätigung. Nutze Mode sie, um zu steuern, ob Datensätze gelöscht werden BulkOperationMode.Individually (einzeln mit dem Fortschritt) oder in einer einzigen Charge.

React
Blazor

LinkExistingRecordGridButton

Öffnet einen Suchdialog, um bestehende Einträge über eine viele-zu-viele-Beziehung zu finden und zu verknüpfen. Nur anwendbar in SubGrid N:N-Beziehungen.

React
Blazor

EntlinkExistingRecordGridButton

Trennt die ausgewählten Unterlagen von einer viele-zu-viele-Beziehung, nachdem sie zur Bestätigung aufgefordert wurde. Nur anwendbar in SubGrid N:N-Beziehungen.

React
Blazor

GridButton

Ein vollständig benutzerdefinierter Button mit einem OnClick Rückruf, der den aktuellen GridContextButton empfängt. Verwenden Sie dies, um benutzerdefinierte Werkzeugleisten-Aktionen zu implementieren.

React
Blazor

Gemeinsame Parameter

  • Behavior — Kontrolliert, ob die Operation sofort ausgeführt wird (GridActionBehavior.Immediately) oder verschoben wird, bis der übergeordnete Kontext speichert (GridActionBehavior.WithGridContext).
  • Mode — Für Lösch-/Verknüpfen/Entkoppel-Buttons regelt, ob Massenoperationen einzeln mit Fortschrittsfeedback oder in einer einzigen Batch-Anfrage ausgeführt werden.
  • IsButtonEnabled / IsButtonVisible — Prädikziert den Steuerknopf-Zustand basierend auf der aktuellen Zeilenauswahl.
Reagieren Blazor

GridButton Baureihe

Parameter

Name
Typ
Default
Beschreibung
AppearanceAppearance?
Stealth
Visuelles Aussehen der Symbolleiste-Taste. Standardeinstellungen zu Appearance.Stealth Der Button liest sich also im Ruhezustand als transparent und malt nur einen Hintergrund beim Schwebefingern — entsprechend den Aktualisieren- und Einstellungs-Tasten des Rasters. Das Raster ist mit Scoped CSS ausgestattet (FluentGridBase.razor.css) Pins --neutral-füllen-stealth-rest zu Transparent, sodass der Schleich-Ruhezustand wirklich keine Füllung hat. Überschreiben pro Knopf, wenn ein Benutzerdefinierte Aktion verlangt ein anderes visuelles Gewicht (z. B. Appearance.Accent für einen primären Aufruf zum Handeln).
Enabledbool?
True
Überschreibt den aktivierten Zustand der Taste unabhängig vom GridButton.IsButtonEnabled Prädikatsergebnis.
IconIcon?
Ein optionales Symbol wird auf dem Button angezeigt.
IsButtonEnabledFunc<IEnumerable<GridRowContext>, bool>
Ein Prädikat, das anhand der aktuellen Zeilenauswahl ausgewertet wird, um zu bestimmen, ob der Button aktiviert ist.
IsButtonVisibleFunc<IEnumerable<GridRowContext>, bool>
Ein Prädikat, das mit der aktuellen Zeilenauswahl bewertet wird, um zu bestimmen, ob der Button sichtbar ist.
IsOpenRecordButtonbool
False
Gibt an, dass dies der 'Bearbeiten'-Button für das Raster ist. Nur ein Button sollte diese Eigenschaft in einem Raster auf 'true' setzen. Der Ereignishandler dieser Schaltfläche wird aufgerufen, wenn eine Zeile im Raster doppelt geklickt wird.
Labelstring?
Das Textlabel wurde auf dem Button angezeigt.
Tooltipstring?
Ein optionaler Tooltip, der angezeigt wird, wenn der Benutzer mit der Maus über die Schaltfläche fährt.
Name: Appearance
Typ: Appearance?
Default: Stealth
Beschreibung: Visuelles Aussehen der Symbolleiste-Taste. Standardeinstellungen zu Appearance.Stealth Der Button liest sich also im Ruhezustand als transparent und malt nur einen Hintergrund beim Schwebefingern — entsprechend den Aktualisieren- und Einstellungs-Tasten des Rasters. Das Raster ist mit Scoped CSS ausgestattet (FluentGridBase.razor.css) Pins --neutral-füllen-stealth-rest zu Transparent, sodass der Schleich-Ruhezustand wirklich keine Füllung hat. Überschreiben pro Knopf, wenn ein Benutzerdefinierte Aktion verlangt ein anderes visuelles Gewicht (z. B. Appearance.Accent für einen primären Aufruf zum Handeln).
Name: Enabled
Typ: bool?
Default: True
Beschreibung: Überschreibt den aktivierten Zustand der Taste unabhängig vom GridButton.IsButtonEnabled Prädikatsergebnis.
Name: Icon
Typ: Icon?
Beschreibung: Ein optionales Symbol wird auf dem Button angezeigt.
Name: IsButtonEnabled
Typ: Func<IEnumerable<GridRowContext>, bool>
Beschreibung: Ein Prädikat, das anhand der aktuellen Zeilenauswahl ausgewertet wird, um zu bestimmen, ob der Button aktiviert ist.
Name: IsButtonVisible
Typ: Func<IEnumerable<GridRowContext>, bool>
Beschreibung: Ein Prädikat, das mit der aktuellen Zeilenauswahl bewertet wird, um zu bestimmen, ob der Button sichtbar ist.
Name: IsOpenRecordButton
Typ: bool
Default: False
Beschreibung: Gibt an, dass dies der 'Bearbeiten'-Button für das Raster ist. Nur ein Button sollte diese Eigenschaft in einem Raster auf 'true' setzen. Der Ereignishandler dieser Schaltfläche wird aufgerufen, wenn eine Zeile im Raster doppelt geklickt wird.
Name: Label
Typ: string?
Beschreibung: Das Textlabel wurde auf dem Button angezeigt.
Name: Tooltip
Typ: string?
Beschreibung: Ein optionaler Tooltip, der angezeigt wird, wenn der Benutzer mit der Maus über die Schaltfläche fährt.

Veranstaltungen

Name
Typ
Beschreibung
OnClickEventCallback<GridContext>
Feuert, wenn der Knopf gedrückt wird, und liefert den Strom Components.GridContext an den Handler.
Name: OnClick
Typ: EventCallback<GridContext>
Beschreibung: Feuert, wenn der Knopf gedrückt wird, und liefert den Strom Components.GridContext an den Handler.