Sie befinden sich hier: start » de » Interne Dokumentation » DokuWiki-Erweiterungen (WvdS) » FluentUI (Design-System-Bibliothek) » FluentUI: Komponenten-Referenzen » FluentUI: Desktop-DataGrid — Demo-Übersicht » DataGrid: Data Editing (Massenaktionen)

DataGrid: Data Editing (Massenaktionen)

Zurück: Demo-Übersicht


1. Übersicht und Zweck

Status: Massenaktionen [Live]. Editierbare Einzelzellen sind [Live] (Abschnitt 8, kein Code) — die DevExpress-Demo-Kategorie „Data Editing„ deckt beide Fälle ab, hier bewusst auf einer Seite gehalten statt zwei nahezu leeren Vertragsseiten.

Vertieft $opts['bulkActions'] des dataGrid()-Basiskontrakts: eine Auswahl-Toolbar für Bulk-Operationen auf mehreren markierten Zeilen.

2. Voraussetzungen

  • Selection → Mehrfachauswahl aktiv (selection => 'multi' + rowKey).
  • Ein Server-Endpunkt, der selection[]-POSTs mit sectok-Prüfung und erneuter ACL-Validierung je Schlüssel entgegennimmt.

3. Konzepte

Client-Auswahl ist nie autoritativ: die Auswahl-Toolbar ist reine Anzeige/Bequemlichkeit — jede Aktion muss serverseitig erneut gegen ACL/Existenz jedes einzelnen Schlüssels geprüft werden (Abschnitt 7, Sicherheit).

Grid-lokal, nicht modulweit: die Auswahl-Toolbar erscheint direkt am Grid, mit der Auswahl; modulweite Aktionen gehören in die Command-Bar-Region der Shell (admin-layout → „Command-Bar als Shell-Region") — beide sind bewusst getrennt.

4. Erste Schritte

echo $widgets->dataGrid($columns, $rows, [
    'selection'   => 'multi',
    'rowKey'      => 'id',
    'bulkActions' => [
        ['label' => 'Gruppe zuweisen', 'element' =>
            '<button type="submit" name="do" value="assign-group" class="wk-btn">Gruppe zuweisen</button>'],
    ],
]);

Falsch: dem POST-Handler blind vertrauen, dass alle selection[]-Werte zur ACL des aktuell angemeldeten Nutzers gehören. Ein manipulierter POST kann beliebige rowKey-Werte enthalten (CWE-639, Broken Access Control) — jeder Schlüssel muss serverseitig erneut gegen die Berechtigung des Nutzers geprüft werden, nicht nur gegen Existenz.

5. Verwendung

Aktionstyp Farbe (Contract v3) Beispiel
gewöhnliche Massenaktion weiß „Gruppe zuweisen“
Sonderaktion blau „CSV-Export der Auswahl„
destruktive Massenaktion rot, erfordert Bestätigungsdialog „Zugriff deaktivieren“

6. API-Referenz: bulkActions

echo $widgets->dataGrid($columns, $rows, [
    'selection'   => 'multi',
    'rowKey'      => 'id',
    'bulkActions' => [
        ['label' => 'Zugriff deaktivieren', 'element' =>
            '<button type="submit" name="do" value="deactivate" class="wk-btn wk-btn--danger">Zugriff deaktivieren</button>'],
        ['label' => 'Gruppe zuweisen', 'element' =>
            '<button type="submit" name="do" value="assign-group" class="wk-btn">Gruppe zuweisen</button>'],
        ['label' => 'CSV-Export der Auswahl', 'element' =>
            '<button type="submit" name="do" value="export-csv" class="wk-btn wk-btn--accent">CSV-Export der Auswahl</button>'],
    ],
]);

Mit 'bulkActions' => [...] rendert das Grid eine Auswahl-Toolbar (.wk-datagrid__bulkbar, intern ein toolbar()-Aufruf) oberhalb des Grid-Bodys: links der Zähler „n ausgewählt„ plus „Auswahl aufheben“, rechts die Aktions-Buttons.

7. Parameter, Optionen und Zustände

Schlüssel Typ Bedeutung
$opts['bulkActions'] array, toolbar()-Item-Schema rendert die Auswahl-Toolbar; nur wirksam bei selection => 'multi'

Zustände: ohne Auswahl ist die Leiste ausgeblendet (No-JS: immer sichtbar, Buttons wirken auf die angehakten Checkboxen).

Sicherheit:

  • Destruktive Massenaktionen öffnen vor der Ausführung einen Bestätigungsdialog (modal()), der die Anzahl und eine Stichprobe der betroffenen Einträge nennt („17 Benutzerzugriffe deaktivieren?„); „Abbrechen“ trägt den Default-Fokus.
  • Server-Seite: jede Massenaktion ist ein normaler Formular-POST der selection[]-Schlüssel mit sectok-Prüfung (bzw. derselbe Endpunkt über das ajax.php-Muster); der Server validiert jeden Schlüssel erneut gegen ACL/Existenz und antwortet mit einer Ergebnis-Zusammenfassung („17 deaktiviert, 2 übersprungen: …„) als Statuszeile über dem Grid.

Fehlerverhalten: bulkActions gesetzt, aber selection !== 'multi' → die Auswahl-Toolbar rendert nicht, kein Fehler.

8. Vollständige Beispiele: Grid-Editing (editierbare Zellen)

dataGrid() rendert ausschließlich Anzeige-Zellen — kein Inline-Editing, keine Editor-Zellen, kein Undo/Redo. Das ist eine bewusste Architekturentscheidung (getrennte Zuständigkeit zwischen Anzeige und Bearbeitung), kein Versehen:

  • Editierbare Tabellen liefert das eigenständige declarativeTable() (Widgets → Basis-Widget-Katalog): native Formularfelder je Zelle ({name}[{i}][{key}]), postet ohne JavaScript als ein Array — nicht dataGrid()-basiert.
  • Bestehendes Live-Beispiel derselben Container-Optik: die Table-Designer-Tabs in wksqliteds — hand-gebaute Tabellen, die die Tabellen-Optik über die Container-Struktur erben.
  • Referenz für Verhaltensdetails: DevExpress ExpressQuantumGrid/XtraGrid „In-place Editing“.

9. Einschränkungen und Randfälle

  • Kein Undo/Redo für Massenaktionen — jede Aktion ist sofort wirksam (nach Bestätigung bei destruktiven Aktionen).
  • Kein Fortschrittsanzeiger für lang laufende Massenaktionen — der Aufrufer muss selbst entscheiden, ob eine Aktion synchron (Formular-POST + Reload) oder asynchron (AJAX + Fortschrittsanzeige) läuft.

10. Accessibility und Kompatibilität

  • Vollständiger Überblick: Accessibility (konsolidiert, nicht hier dupliziert).
  • Ohne JavaScript bleibt die Auswahl-Toolbar dauerhaft sichtbar (statt nur bei aktiver Auswahl) — funktional identisch, nur ohne die Zähler-Blende.

11. Troubleshooting

Symptom: Auswahl-Toolbar erscheint nicht trotz gesetztem bulkActions.

Ursache: $opts['selection'] ist nicht multibulkActions wirkt nur bei Mehrfachauswahl.

Lösung: selection => 'multi' und rowKey setzen (s. Selection).

12. Verwandte Themen

de/wiki/dwe/wkfluentui/component/datagrid/bulk-actions.txt · Zuletzt geändert: von 0.0.0.0