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/OpenRecordGridButtonwenn 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 mitBehavior="GridActionBehavior.WithGridContext"(dem Standard), um den Speicherstand des neuen Datensatzes in den transaktionalen Commit des übergeordneten Kontexts einzufügen. - Navigieren (ganze Seite) — Verwenden
NavigateNewRecordGridButtonSie /NavigateOpenRecordGridButtonwenn 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 eigenesRecordContext, 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.
- Der Benutzer klickt im Dialog auf Speichern.
- Dialog validiert und schickt dann ein oder mehrere
OrganizationRequests durchExecuteMultipleAsync. - 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.
- Der Benutzer klickt im Dialog auf Speichern, → der Datensatz (oder aktualisieren / assoziieren / dissoziieren) im Raster in der Warteschlange ist.
- Dialog endet. Der übergeordnete Kontext der Seite wechselt zu
IsDirty=true; der Speichern-Button auf Seitenebene aktiviert. - 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. - Server liefert zurück; die Seite aktualisiert sich; Warteschlangen werden frei;
IsDirtyflippt 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
WithGridContextist 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.
{/* Center-Dialog mit Standardform */}
<NewRecordGridButton>
<NewContactForm />
</NewRecordGridButton>
{/* Seitenplatte mit Standardform */}
<NewRecordGridButton location="panel">
<NewContactForm />
</NewRecordGridButton>
{/* Zentrale Dialog mit der Zaubererform – Kinder sind <WizardRecordPage>
Elemente (kein FormType-Requisit erforderlich; der Button erkennt automatisch). */}
<NewRecordGridButton location="center">
<WizardRecordPage>
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</WizardRecordPage>
<WizardRecordPage>
<MoneyEdit columnName="annualincome" />
</WizardRecordPage>
</NewRecordGridButton>
{/* Sofort speichern, anstatt zu verschieben */}
<NewRecordGridButton behavior="immediately">
<NewContactForm />
</NewRecordGridButton><!-- Center-Dialog mit Standardform -->
<NewRecordGridButton TForm="NewContactForm" />
<!-- Seitenplatte mit Standardform -->
<NewRecordGridButton TForm="NewContactForm"
Location="DialogLocation.Right" />
<!-- Center-Dialog mit Wizard-Form -->
<NewRecordGridButton TForm="NewContactForm"
Location="DialogLocation.Center"
FormType="FormType.WizardForm" />
<!-- Sofort speichern, anstatt zu verschieben -->
<NewRecordGridButton TForm="NewContactForm"
Behavior="GridActionBehavior.Immediately" />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.
// EditContactForm.tsx
<TabList>
<Tab value="general">Allgemeines</Tab>
<Tab value="other">Sonstiges</Tab>
</TabList>
{activeTab === 'general' && (
<>
<TextEdit columnName="firstname" />
<TextEdit columnName="middlename" />
<TextEdit columnName="lastname" />
</>
)}
{activeTab === 'other' && (
<>
<MoneyEdit columnName="annualincome" />
<TextEdit columnName="telephone1" type="tel" />
</>
)}<!-- EditContactForm.razor -->
<FluentTabs Style="width: 100%">
<FluentTab Label="Allgemeines">
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="middlename" />
<TextEdit ColumnName="lastname" />
</FluentTab>
<FluentTab Label="Sonstiges">
<MoneyEdit ColumnName="annualincome" />
<TextEdit ColumnName="telephone1"
TextFieldType="TextFieldType.Tel" />
</FluentTab>
</FluentTabs>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.
// NewContactForm.tsx
<WizardRecordPage>
<TextEdit columnName="firstname" />
<TextEdit columnName="middlename" />
<TextEdit columnName="lastname" />
</WizardRecordPage>
<WizardRecordPage>
<MoneyEdit columnName="annualincome" />
<TextEdit columnName="telephone1" type="tel" />
</WizardRecordPage><!-- NewContactForm.razor -->
<WizardRecordPage>
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="middlename" />
<TextEdit ColumnName="lastname" />
</WizardRecordPage>
<WizardRecordPage>
<MoneyEdit ColumnName="annualincome" />
<TextEdit ColumnName="telephone1"
TextFieldType="TextFieldType.Tel" />
</WizardRecordPage>Anmerkung
Wenn du eine Zaubererform verwendest, setze
FormType="FormType.WizardForm"auf dieNewRecordGridButton. 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.
<WizardRecordPage>
{/* Erforderliche Felder hier – der Benutzer kann erst weitermachen, wenn sie ausgefüllt sind */}
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</WizardRecordPage>
<WizardRecordPage forceSuccessfulValidationBeforeSave={false}>
{/* Optionale Felder – der Benutzer kann auch bei Validierungsfehlern voranschreiten */}
<MoneyEdit columnName="annualincome" />
</WizardRecordPage><WizardRecordPage>
<!-- Erforderliche Felder hier – der Benutzer kann erst weitermachen, wenn sie ausgefüllt sind -->
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</WizardRecordPage>
<WizardRecordPage ForceSuccessfulValidationBeforeSave="false">
<!-- Optionale Felder – der Benutzer kann auch bei Validierungsfehlern voranschreiten -->
<MoneyEdit ColumnName="annualincome" />
</WizardRecordPage>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.
{/* Center-Dialog (Standard) */}
<OpenRecordGridButton>
<EditContactForm />
</OpenRecordGridButton>
{/* Seitenpaneel */}
<OpenRecordGridButton location="panel">
<EditContactForm />
</OpenRecordGridButton>
{/* Sofort speichern */}
<OpenRecordGridButton behavior="immediately">
<EditContactForm />
</OpenRecordGridButton>
{/* Unterdrücken Sie den Hyperlink zum Primärnamen (Zeilendoppelklick löst Bearbeiten aus) */}
<MainGrid tableName="contact" allowNavigateOnPrimaryNameClick={false}>
<GridButtons>
<OpenRecordGridButton>
<EditContactForm />
</OpenRecordGridButton>
</GridButtons>
</MainGrid>
{/* Unterdrücke den Zeilen-Doppelklick-Handler (Hyperlink zum Hauptnamen funktioniert weiterhin) */}
<MainGrid tableName="contact" allowOpenOnRowDoubleClick={false}>
<GridButtons>
<OpenRecordGridButton>
<EditContactForm />
</OpenRecordGridButton>
</GridButtons>
</MainGrid><!-- Center-Dialog (Standard) -->
<OpenRecordGridButton TForm="EditContactForm" />
<!-- Seitenpaneel -->
<OpenRecordGridButton TForm="EditContactForm"
Location="DialogLocation.Right" />
<!-- Sofort speichern -->
<OpenRecordGridButton TForm="EditContactForm"
Behavior="GridActionBehavior.Immediately" />
<!-- Unterdrücken Sie den Hyperlink zum Primärnamen (Zeilendoppelklick löst Bearbeiten aus) -->
<MainGrid TableName="contact"
AllowNavigateOnPrimaryNameClick="false">
<Buttons>
<OpenRecordGridButton TForm="EditContactForm" />
</Buttons>
</MainGrid>
<!-- Unterdrücke den Zeilen-Doppelklick-Handler (Hyperlink zum Hauptnamen funktioniert weiterhin) -->
<MainGrid TableName="contact"
AllowNavigateOnRowDoubleClick="false">
<Buttons>
<OpenRecordGridButton TForm="EditContactForm" />
</Buttons>
</MainGrid>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.
{/* Statische URL */}
<NavigateNewRecordGridButton url="/contacts/new" />
{/* Dynamische URL basierend auf ausgewählter Ansicht */}
<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('Unbekannte Tabelle');
}
}}
/><!-- Statische URL -->
<NavigateNewRecordGridButton Url="/contacts/new" />
<!-- Dynamische URL basierend auf ausgewählter Ansicht -->
<NavigateNewRecordGridButton OnClick="OnNewClick" />
@code {
private async Task OnNewClick(NavigateGridButtonContext ctx)
{
ctx.Url = ctx.GridContext.SelectedView.TableName switch
{
"contact" => "/contacts/new",
"account" => "/accounts/new",
_ => throw new Exception("Unbekannte Tabelle"),
};
}
}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} .
{/* Erstelle die URL pro Datensatz über URLLFür */}
<NavigateOpenRecordGridButton
urlFor={(record) => `/contacts/edit?contactId=${record.id}`}
/>
{/* Dynamische URL basierend auf der ausgewählten Ansicht */}
<NavigateOpenRecordGridButton
urlFor={(record, ctx) => {
switch (ctx.selectedView?.tableName) {
case 'contact': return `/contacts/edit?contactId=${record.id}`;
case 'account': return `/accounts/edit?accountId=${record.id}`;
default: throw new Error('Unbekannte Tabelle');
}
}}
/><!-- {0} wird durch die ID des ausgewählten Datensatzes ersetzt. -->
<NavigateOpenRecordGridButton Url="/contacts/edit?contactId={0}" />
<!-- Dynamische URL -->
<NavigateOpenRecordGridButton OnClick="OnEditClick" />
@code {
private async Task OnEditClick(NavigateGridButtonContext ctx)
{
ctx.Url = ctx.GridContext.SelectedView.TableName switch
{
"contact" => "/contacts/edit?contactId={0}",
"account" => "/accounts/edit?accountId={0}",
_ => throw new Exception("Unbekannte Tabelle"),
};
}
}NavigateRecordGridButton
Ein universeller Navigationsbutton mit einem benutzerdefinierten Label, Symbol und URL. Nutze dies für benutzerdefinierte Navigationsaktionen, die nicht zum Neu-/Bearbeitungsmuster passen.
<NavigateRecordGridButton
title="Details anzeigen"
url="/records/details?id={0}"
buttonEnabledBehavior={GridButtonBehavior.OnlyOneSelected}
/><NavigateRecordGridButton Title="Details anzeigen"
Url="/records/details?id={0}"
ButtonEnabledBehavior="GridButtonBehavior.WhenOneSelected" />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.
{/* Lösche einen nach dem anderen mit dem Fortschritt */}
<DeleteRecordGridButton mode="individually" />
{/* Löschen in einer einzigen Charge */}
<DeleteRecordGridButton mode="bulk" />
{/* Lösche sofort ohne Aufschub */}
<DeleteRecordGridButton behavior="immediately" /><!-- Lösche einen nach dem anderen mit dem Fortschritt -->
<DeleteRecordGridButton Mode="BulkOperationMode.Individually" />
<!-- Löschen in einer einzigen Charge -->
<DeleteRecordGridButton Mode="BulkOperationMode.Batch" />
<!-- Lösche sofort ohne Aufschub -->
<DeleteRecordGridButton Behavior="GridActionBehavior.Immediately" />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.
<LinkExistingRecordGridButton />
{/* Sofort als Associate tätig */}
<LinkExistingRecordGridButton behavior="immediately" /><LinkExistingRecordGridButton />
<!-- Sofort als Associate tätig -->
<LinkExistingRecordGridButton Behavior="GridActionBehavior.Immediately" />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.
<UnlinkExistingRecordGridButton />
{/* Dissoziiere sofort */}
<UnlinkExistingRecordGridButton behavior="immediately" /><UnlinkExistingRecordGridButton />
<!-- Dissoziiere sofort -->
<UnlinkExistingRecordGridButton Behavior="GridActionBehavior.Immediately" />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.
<SubGrid relationshipName="contact_customer_accounts">
<GridButtons>
<NewRecordGridButton>
<NewContactForm />
</NewRecordGridButton>
<OpenRecordGridButton>
<EditContactForm />
</OpenRecordGridButton>
<DeleteRecordGridButton />
{/* Benutzerdefinierter Knopf */}
<GridButton
label="Export"
icon={<ArrowDownload20Regular />}
enabledBehavior={GridButtonBehavior.OneOrMoreSelected}
onClick={async (ctx) => {
const selectedRecords = ctx.selectedRecords;
// Benutzerdefinierte Logik – exportieren, drucken, E-Mails senden usw.
}}
/>
</GridButtons>
</SubGrid><SubGrid RelationshipName="contact_customer_accounts">
<Buttons>
<NewRecordGridButton TForm="NewContactForm" />
<OpenRecordGridButton TForm="EditContactForm" />
<DeleteRecordGridButton />
<!-- Benutzerdefinierter Knopf -->
<GridButton Label="Export"
Icon="@(new Icons.Regular.Size20.ArrowDownload())"
IsButtonEnabled="DefaultGridButtonBehavior.GetBehavior(GridButtonBehavior.WhenOneOrMoreSelected)"
OnClick="OnExportClick" />
</Buttons>
</SubGrid>
@code {
private async Task OnExportClick(GridContext context)
{
var selectedRecords = context.SelectedRecords;
// Benutzerdefinierte Logik – exportieren, drucken, E-Mails senden usw.
}
}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.
GridButton Baureihe
Parameter
Name | Typ | Default | Beschreibung |
|---|---|---|---|
Appearance | Appearance? | 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 (Appearance.Accent für einen primären Aufruf zum Handeln). |
Enabled | bool? | True | Überschreibt den aktivierten Zustand der Taste unabhängig vom GridButton.IsButtonEnabled Prädikatsergebnis. |
Icon | Icon? | Ein optionales Symbol wird auf dem Button angezeigt. | |
IsButtonEnabled | Func<IEnumerable<GridRowContext>, bool> | Ein Prädikat, das anhand der aktuellen Zeilenauswahl ausgewertet wird, um zu bestimmen, ob der Button aktiviert ist. | |
IsButtonVisible | Func<IEnumerable<GridRowContext>, bool> | Ein Prädikat, das mit der aktuellen Zeilenauswahl bewertet wird, um zu bestimmen, ob der Button sichtbar ist. | |
IsOpenRecordButton | bool | 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. |
Label | string? | Das Textlabel wurde auf dem Button angezeigt. | |
Tooltip | string? | Ein optionaler Tooltip, der angezeigt wird, wenn der Benutzer mit der Maus über die Schaltfläche fährt. |
AppearanceAppearance.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 (Appearance.Accent für einen primären Aufruf zum Handeln).EnabledGridButton.IsButtonEnabled Prädikatsergebnis.IconIsButtonEnabledIsButtonVisibleIsOpenRecordButtonLabelTooltipVeranstaltungen
Name | Typ | Beschreibung |
|---|---|---|
OnClick | EventCallback<GridContext> | Feuert, wenn der Knopf gedrückt wird, und liefert den Strom Components.GridContext an den Handler. |
OnClickComponents.GridContext an den Handler.