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

DataGrid: Selection

Zurück: Demo-Übersicht


1. Übersicht und Zweck

Status: [Live]. Referenzen: Fluent UI DetailsList (SelectionMode.multiple), Azure-DevOps-Backlog-Bulk-Edit (Auswahl-Toolbar), DevExpress-Grid-Checkbox-Selection, VS-Code-Listen (Ctrl/Shift-Modell).

Vertieft den selection/rowKey-Teil des dataGrid()-Basiskontrakts: Einzel- und Mehrfachauswahl von Zeilen, Maus-/Tastaturbedienung, JS-API für Konsumenten.

2. Voraussetzungen

  • dataGrid()-Grundkontrakt bereits verstanden.
  • Bei multi: jede Zeile braucht einen Spalten-Wert, der sie eindeutig identifiziert (für rowKey).

3. Konzepte

Auswahlzustand ist ansichts-lokal: Filter-, Sortier- oder Seitenwechsel verwirft die Auswahl (bewusst — keine unsichtbar mitlaufende Auswahl über Ansichten hinweg).

Aktive Zeile ≠ Auswahl: wie in Fluent UI DetailsList sind Fokus-Cursor (Roving-Tabindex) und Auswahl (aria-selected) getrennte Konzepte — Pfeiltasten bewegen den Fokus, Leertaste/Klick ändert die Auswahl.

4. Erste Schritte

echo $widgets->dataGrid($columns, $rows, [
    'selection' => 'single',
]);

Falsch: rowKey auf eine Spalte zeigen lassen, deren Wert nicht eindeutig ist (z. B. status). Mehrere Zeilen posten dann denselben selection[]-Wert — der Server kann sie serverseitig nicht unterscheiden.

5. Verwendung

Einsatz Muster
Detailansicht der aktiven Zeile (Auxbar, Eigenschaften-Panel) selection => 'single' + wk-selectionchange-Event
Massenaktionen auf mehreren Zeilen selection => 'multi' + rowKey + bulkActions
Pilot-Konsument wksqliteds Browse-Screen — speist über wk-selectionchange das Live-Nachladen der Auxbar

6. API-Referenz

$opts['selection'] Verhalten
none (Default) Keine Auswahl-UI
single Eine aktive Zeile; 'selectable' => true bleibt als Alias gültig
multi Checkbox-Spalte + Auswahl-Toolbar; erfordert $opts['rowKey']
echo $widgets->dataGrid($columns, $rows, [
    'selection' => 'multi',
    'rowKey'    => 'id',
]);

7. Parameter, Optionen und Zustände

Schlüssel Typ Bedeutung
$opts['selection'] 'none'|'single'|'multi' Auswahlmodell, s. Abschnitt 6
$opts['selectable'] bool Alias für selection => 'single'
$opts['rowKey'] string Spalten-Key, der eine Zeile eindeutig identifiziert — Pflicht bei multi

Einzelauswahl (single)

Klick/Pfeiltasten markieren die aktive Zeile (aria-selected, --wk-admin-row-selected-bg); Strg+C kopiert sie (data-wk-copy der Zeile gewinnt, sonst der Tab-verbundene Zelltext — s. Data Export).

Mehrfachauswahl (multi)

  • Checkbox-Spalte: erste Spalte mit echten <input type="checkbox" name="selection[]" value="<rowKey>">-Zellen plus Kopf-Checkbox („alle sichtbaren Zeilen an-/abwählen„, indeterminate bei Teilauswahl). Die Checkboxen liegen in einem umschließenden <form>die Auswahl funktioniert dadurch vollständig ohne JavaScript (Formular-POST von selection[]).
  • Maus: Klick auf die Checkbox togglet; Strg+Klick auf die Zeile togglet ebenfalls; Shift+Klick wählt den Bereich von der zuletzt aktiven bis zur geklickten Zeile.
  • Tastatur: Pfeiltasten bewegen die aktive Zeile, Leertaste togglet sie, Shift+Pfeil erweitert den Bereich, Strg+A wählt alle sichtbaren Zeilen, Strg+C kopiert alle gewählten Zeilen (zeilenweise, je Zeile gewinnt deren data-wk-copy-Attribut — s. Data Export). Der Container trägt aria-multiselectable=„true“, Zeilen aria-selected.

Selection-API (JavaScript)

  • wkDataGrid.getSelection(gridEl) → Array der rowKey-Werte der aktuell gewählten Zeilen.
  • Bei jeder Änderung feuert das Grid ein bubbelndes CustomEvent wk-selectionchange mit detail = { keys: string[], count: number }.
document.querySelector('.wk-datagrid').addEventListener('wk-selectionchange', (ev) => {
    console.log(ev.detail.count, 'Zeilen ausgewählt:', ev.detail.keys);
});

Fehlerverhalten

Bedingung Verhalten
selection => 'multi' ohne rowKey stille Degradierung auf none — kein Fehler
rowKey zeigt auf nicht-eindeutige Spalte keine Prüfung durch das Widget — mehrere Zeilen posten denselben Wert, der Server muss das erkennen (s. Abschnitt 4, „Falsch“)

8. Vollständige Beispiele

echo $widgets->dataGrid($columns, $rows, [
    'selection' => 'multi',
    'rowKey'    => 'id',
]);

9. Einschränkungen und Randfälle

  • Die Auswahl gilt je Ansicht: Filter-, Sortier- oder Seitenwechsel verwirft sie (bewusst, s. Abschnitt 3).
  • Kein „Auswahl über mehrere Seiten hinweg merken„ — jede neue Ansicht startet mit leerer Auswahl.

10. Accessibility und Kompatibilität

  • Vollständiger Überblick: Accessibility (konsolidiert, nicht hier dupliziert).
  • Ohne JavaScript bleibt multi vollständig nutzbar (Formular-POST); single erfordert für die Klick-Markierung JavaScript, native Tab-Navigation bleibt aber immer erhalten.

11. Troubleshooting

Symptom: Checkbox-Spalte fehlt trotz selection => 'multi'.

Ursache: rowKey fehlt in $opts — das Widget degradiert still auf none.

Lösung: $opts['rowKey'] auf einen eindeutigen Spalten-Key setzen.

12. Verwandte Themen

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